2011-06-03 112 views

回答

94
objList.Select(o=>o.typeId).Distinct() 
+2

第二种形式似乎使用distinct超载据我所知,这并不存在。 – 2011-06-03 18:56:26

+0

哎呀,删除第二个,谢谢@Jon Skeet,可以用IEqualityComparer – 2011-06-03 19:01:00

+0

完成正如Jon Skeet所说,这将只返回Select中指定的属性。 – 2016-03-09 10:53:21

6

当然,请使用Enumerable.Distinct

鉴于obj集合(如foo),你会做这样的事情:

var distinctTypeIDs = foo.Select(x => x.typeID).Distinct(); 
2

我觉得这是你找什么:

var objs= (from c in List_Objects 
orderby c.TypeID select c).GroupBy(g=>g.TypeID).Select(x=>x.FirstOrDefault());  

与此类似Returning a Distinct IQueryable with LINQ?

+0

'。首先'是好的,因为如果没有东西在里面,你就没有这个组。 – mquander 2011-06-03 18:54:32

+1

你可以使用'GroupBy'的替代重载来简化它 - 请参阅我的答案。 – 2011-06-03 18:55:50

32

假设你想要完整的对象,但只想通过typeID来处理独特性,没有什么内置的int LINQ使这个变得简单。 (如果您只是希望typeID值,很容易 - 工程与Select,然后使用普通Distinct通话。)

MoreLINQ我们有DistinctBy操作,您可以使用:

var distinct = list.DistinctBy(x => x.typeID); 

这只适用于LINQ to Objects。

你可以用一组或查找,它只是有点讨厌,效率低下:

var distinct = list.GroupBy(x => x.typeID, (key, group) => group.First()); 
+0

要让DistinctBy出现,您需要添加命名空间Microsoft.Ajax.Utilities – Shiljo 2016-08-11 01:33:29

+0

@Shil:不,我正在写关于MoreLINQ中的DistinctBy。与Microsoft.Ajax.Utilities无关。 – 2016-08-11 01:38:59

1

我想结合特定的数据到下拉,它应该是不同的。 我做了以下内容:

List<ClassDetails> classDetails; 
List<string> classDetailsData = classDetails.Select(dt => dt.Data).Distinct.ToList(); 
ddlData.DataSource = classDetailsData; 
ddlData.Databind(); 

看看是否有帮助

9

如果只是想用户纯LINQ中,你可以使用GROUPBY:

List<obj> distinct = 
    objs.GroupBy(car => car.typeID).Select(g => g.First()).ToList(); 

如果你想在所有使用的方法在整个应用程序:

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; 
     } 
    } 
} 

为MoreLinq是否

用这种方法找到只使用Id属性不同的值,你可以使用:

var query = objs.DistinctBy(p => p.TypeId); 

您可以使用多个属性:

var query = objs.DistinctBy(p => new { p.TypeId, p.Name }); 
相关问题