我尝试在Linq中使用.distinct根据表中的一个字段来获得结果(所以不需要从表中获得整个重复的记录)。
我知道使用distinct编写基本查询如下:
var query = (from r in table1
orderby r.Text
select r).distinct();
但我需要不复制r.text
的结果。
发布于 2013-01-14 23:09:18
试试这个:
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());
这将按Text
对表进行分组,并使用每个组中的第一行,从而得到Text
为distinct的行。
发布于 2013-01-14 23:15:07
MoreLinq有一个您可以使用的DistinctBy方法:
它将允许您执行以下操作:
var results = table1.DistictBy(row => row.Text);
该方法的实现(简称参数验证)如下所示:
private static IEnumerable<TSource> DistinctByImpl<TSource, TKey>(IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
HashSet<TKey> knownKeys = new HashSet<TKey>(comparer);
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
https://stackoverflow.com/questions/14321013
复制相似问题