我想使用Linq来比较两个列表的值,这些列表基于列表项值为字符串[]数组的每个列表中的不同字段。
数组的格式如下:
string[]
条目string[]
条目我试图比较数组1中字段0的值,以检查数组2中字段12中的任何记录中是否存在该值,并返回数组2中找不到匹配项的数组1记录。 / p>
到目前为止,我的目标是:
var r = array1.Where( p => array2.All( p2 => p2[12] != p[0] ) ).ToList();
这给了我以下错误:
“System.IndexOutOfRangeException”类型的未处理异常
我该如何使这项工作?我知道我可以做一个嵌套循环O(n)^ n,但这并不理想,这就是为什么我希望使用Linq来比较子值。
答案 0 :(得分:3)
我用你的代码描述做了一个例子,它运行得很好。 你能检查你的阵列是否有正确的尺寸吗?
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
}
答案 1 :(得分:0)
p现在不是一个数组。使用:
var r = array1.Where( p => array2.All( p2 => p2[12] != p ) ).ToList();