我怎么能用扩展方法或Linq做到这一点?

Fre*_*ood 0 .net c# linq extension-methods

用我糟糕的英语解释它有点难,但我会尝试.

在下面的列表序列中,如果项目第一个字段与另一个项目第一个字段值具有相同的值但不是相同的第二个字段.结果我想收集具有相同的第一个字段而不是第二个字段的项目.

它看起来很容易,但我认为它不是任何.考虑到你将在相同的序列上工作,所以有效地做这件事很重要.

class MyClass
{
    public int first;
    public int second;
}
List<MyClass> sequence = new List<MyClass>();
Run Code Online (Sandbox Code Playgroud)

Rub*_*ias 6

试试这个:

List<MyClass> sequence = new List<MyClass>()
{
    new MyClass{ First = 1, Second = 10 },
    new MyClass{ First = 1, Second = 10 },
    new MyClass{ First = 2, Second = 11 },
    new MyClass{ First = 2, Second = 12 }
};

var doesntMatch = sequence
    .GroupBy(i => i.First)
    .Select(g => new
        { 
            Key = g.Key, 
            Values = g.Select(i => i.Second).Distinct()
        })
    .Where(i => i.Values.Count() > 1);
foreach (var i in doesntMatch)
{
    Console.WriteLine(
        "First = {0} contains {1} distinct values: {2}", i.Key, i.Values.Count(),
        String.Join(", ", i.Values.Select(n => n.ToString()).ToArray()));
}

// output: "First = 2 contains 2 distinct values: 11, 12"
Run Code Online (Sandbox Code Playgroud)