2011-06-03 148 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 }); 
相關問題