Linq根据字段比较查询两个数组的差异

时间:2016-11-09 10:37:53

标签: c# arrays linq

我想使用Linq来比较两个列表的值,这些列表基于列表项值为字符串[]数组的每个列表中的不同字段。

数组的格式如下:

数组1

  • 列表
  • 每个string[]条目
  • 的4个字段

数组2

  • 列表
  • string[]条目
  • 15个字段

我试图比较数组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来比较子值。

2 个答案:

答案 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();