LINQ Distinct由列值设置

时间:2011-11-08 20:19:32

标签: linq

是否有一个简单的LINQ查询来获取特定列值(而不是整个记录)的不同记录?

任何人都知道如何过滤只包含不同值的列表?

3 个答案:

答案 0 :(得分:3)

您可以使用morelinq之类的库来执行此操作。您对DistinctBy()方法感兴趣。

var query = records.DistinctBy(record => record.Column);

否则,您可以手动执行此操作。

var query =
    from record in records
    group record by record.Column into g
    select g.First();

答案 1 :(得分:2)

首先选择一个值,然后运行Distinct。

 (from item in table
 select item.TheSingleValue).Distinct();

如果您需要整个记录,则需要使用group x by into y。然后,您需要找到合适的聚合函数,例如FirstMaxAverage或类似函数,以选择组中的其他值。

from item in table
group item by item.TheSingleValue into g
select new { TheSingleValue = g.Key, OtherValue1 = g.First().OtherValue1, OtherValue2 = g.First().OtherValue2 };

答案 2 :(得分:0)

您可以实现IEqualityComparer接口:

public class MyObjectComparer : IEqualityComparer<MyObject>
{
    public bool Equals(MyObject x, MyObject y)
    {
        return x.ColumnNameProperty == y.ColumnNameProperty;
    }
    public int GetHashCode(MyObject obj)
    {
        return obj.ColumnNameProperty.GetHashCode();
    }
}

将实例传递给Distinct方法:

var distinctSource = source.Distinct(new MyObjectComparer());