2011-12-02 66 views
0

如何獲取以下內容以在x.name上使用distinct?如何使用linq/projection在col上選擇不同的顏色?

var x= db.Cs.Select(x => new{name=x.name,id=x.id}).Distinct().ToList(); 

每下面的示例數據:

name, id 
joe, 1 
joe, 2 
joe, 3 

我得到整套回使用上述不同的查詢:

name, id 
joe, 1 
joe, 2 
joe, 3 

我真正想要的顯然是一個唯一的行,但我仍然需要一個標識符以及(即):

name, id 
joe, 1 
+0

以最小ID然後採取所有的distincts。 – Bastardo

回答

1

您可以使用GroupBy方法:

var x = db.Cs.Select(x => new { x.name, x.id}).GroupBy(x => x.name); 

然後你會得到一本字典其中的關鍵將是名稱和值的投影。

或者如果你真的想使用不同的,你可以編寫自己的IEqualityComparer並使用正確的Distinct overload

3

只是爲了完成斯蒂芬的職位。他的代碼,結果是IGrouping ....如果你希望你的ID /名稱annonymous類型,只補充一點:

var x = db.Cs.Select(x => new { x.name, x.id}) 
      .GroupBy(x => x.name) 
      .Select(g => g.First())