首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于从对象列表中返回不同字段值的linq查询

用于从对象列表中返回不同字段值的linq查询
EN

Stack Overflow用户
提问于 2011-06-04 02:48:15
回答 5查看 244.6K关注 0票数 105
代码语言:javascript
复制
class obj
{
    int typeId; //10 types  0-9 
    string uniqueString; //this is unique
}

假设有一个包含100个obj元素的列表,但只有10个唯一的typeID。

有没有可能写一个LINQ查询返回objs列表中的10个唯一int?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-04 02:49:47

代码语言:javascript
复制
objList.Select(o=>o.typeId).Distinct()
票数 181
EN

Stack Overflow用户

发布于 2016-03-04 20:23:31

如果只想使用纯Linq,可以使用groupby:

代码语言:javascript
复制
List<obj> distinct =
  objs.GroupBy(car => car.typeID).Select(g => g.First()).ToList();

如果你想在整个应用程序中使用一个方法,就像MoreLinq所做的那样:

代码语言:javascript
复制
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (!seenKeys.Contains(keySelector(element)))
        {
            seenKeys.Add(keySelector(element));
            yield return element;
        }
    }
}

使用此方法仅通过Id属性查找不同的值,您可以使用:

代码语言:javascript
复制
var query = objs.DistinctBy(p => p.TypeId);

您可以使用多个属性:

代码语言:javascript
复制
var query = objs.DistinctBy(p => new { p.TypeId, p.Name });
票数 33
EN

Stack Overflow用户

发布于 2011-06-04 02:50:01

当然,使用Enumerable.Distinct

给定一个obj集合(例如foo),您可以这样做:

代码语言:javascript
复制
var distinctTypeIDs = foo.Select(x => x.typeID).Distinct();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6231360

复制
相关文章

相似问题

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