Linq查询基于字段比较的两个数组的差异
本文关键字:两个 数组 查询 字段 Linq 比较 于字段 | 更新日期: 2023-09-27 18:17:00
我想使用Linq根据每个列表中不同的字段比较两个列表的值,其中列表项的值是一个字符串[]数组。
数组的格式如下:
数组1
- 每个
string[]
条目4个字段
数组2
- 每个
string[]
条目15个字段
我正试图比较数组1中字段0的值,以检查该值是否存在于数组2中字段12中的任何记录中,并返回数组2中没有匹配的数组1记录。
目前我所知道的是:
var r = array1.Where( p => array2.All( p2 => p2[12] != p[0] ) ).ToList();
这给了我以下错误:
类型为"System"的未处理异常。IndexOutOfRangeException '
我怎样才能使它工作?我知道我可以做一个嵌套循环O(n)^n,但这并不理想,这就是为什么我希望使用Linq来比较子值。
我用你的代码描述做了一个例子,它工作得很好。你能检查一下你的数组大小是否正确吗?
private static void Main(string[] args)
{
var array1 = new List<string[]>
{
new[] {"1", "2", "3", "4"},
new[] {"A", "B", "C", "D"}
};
var array2 = new List<string[]>
{
new[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"},
new[] {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"}
};
var r = array1.Where(p => array2.All(p2 => p2[12] != p[0])).ToList();
r.ForEach(_ => Array.ForEach(_, Console.WriteLine));
// output:
// 1
// 2
// 3
// 4
// A
// B
// C
// D
}
p现在不是数组。用途:
var r = array1.Where( p => array2.All( p2 => p2[12] != p ) ).ToList();