首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Linq中的Distinct仅基于表的一个字段

Linq中的Distinct仅基于表的一个字段
EN

Stack Overflow用户
提问于 2013-01-14 23:07:22
回答 7查看 181.4K关注 0票数 158

我尝试在Linq中使用.distinct根据表中的一个字段来获得结果(所以不需要从表中获得整个重复的记录)。

我知道使用distinct编写基本查询如下:

代码语言:javascript
复制
var query = (from r in table1
orderby r.Text
select r).distinct();

但我需要不复制r.text的结果。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-01-14 23:09:18

试试这个:

代码语言:javascript
复制
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());

这将按Text对表进行分组,并使用每个组中的第一行,从而得到Text为distinct的行。

票数 346
EN

Stack Overflow用户

发布于 2013-01-14 23:15:07

MoreLinq有一个您可以使用的DistinctBy方法:

它将允许您执行以下操作:

代码语言:javascript
复制
var results = table1.DistictBy(row => row.Text);

该方法的实现(简称参数验证)如下所示:

代码语言:javascript
复制
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;
        }
    }
}
票数 32
EN

Stack Overflow用户

发布于 2013-01-14 23:46:50

围绕这个话题有很多讨论。

你可以找到其中的一个here

最受欢迎的建议之一是@Servy指出的将lambda表达式作为参数的独特方法。

C#的首席架构师Anders Hejlsberg提出了解决方案here。还解释了为什么框架设计团队决定不添加采用lambda的Distinct方法的重载。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14321013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档