我討厭張貼這個,因爲它有點主觀,但它感覺有一個更好的方法來做到這一點,我只是沒有想到。「更好」(更簡單,更快,無論)版本'不同的委託'?
有時候我想通過某些列/屬性來「區分」某個集合,但不會丟棄其他列(是的,這確實會丟失信息,因爲它會變成任意的那些其他列的值將隨之而來) 。
注意,這個擴充比拿,因爲這樣的事情的IEqualityComparer<T>
可以做更復雜的比較邏輯含混重載那麼強大,但是這是我所需要的,現在:)
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> getKeyFunc)
{
return from s in source
group s by getKeyFunc(s) into sourceGroups
select sourceGroups.First();
}
用法示例:
var items = new[]
{
new { A = 1, B = "foo", C = Guid.NewGuid(), },
new { A = 2, B = "foo", C = Guid.NewGuid(), },
new { A = 1, B = "bar", C = Guid.NewGuid(), },
new { A = 2, B = "bar", C = Guid.NewGuid(), },
};
var itemsByA = items.DistinctBy(item => item.A).ToList();
var itemsByB = items.DistinctBy(item => item.B).ToList();
+1這就是我要做的;) – 2010-07-15 22:14:22