是否有一个简单的LINQ查询来获取特定列值(而不是整个记录)的不同记录?
任何人都知道如何过滤只包含不同值的列表?
答案 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
。然后,您需要找到合适的聚合函数,例如First
,Max
,Average
或类似函数,以选择组中的其他值。
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());