2011-07-25 76 views
0

我是Linq noob,所以請原諒我的無知,但我需要按表中的列進行分組,然後返回該列。我應該結束一個唯一的數字列表。Linq Single Column Group不工作

這是我的LINQ

from r in myTable 
group r.UserID by r.UserID 

但在LINQ的墊它得到接近我想要什麼,但每次類似的ID有一個「關鍵」或一些與組合在一起都是一樣的IDS,包括在結果中。我只想要一個數字列表。

這是完美的SQL。

SELECT UserID FROM myTable 
GROUP BY UserID 

回答

6

爲什麼不

var userIds = myTable.Select(r => r.UserId).Distinct(); 

,或者,如果你喜歡的查詢語法

var userIds = (from r in myTable select r.UserId).Distinct(); 

分組是不必要的,如果你只打算使用組ID。

+1

+1,但「Distinct」不會將投影作爲參數。語法應該是'var userIds = myTable.Select(r => r.UserId).Distinct();'。 (您的查詢語法版本正確。) – LukeH

+0

哇,太好了,謝謝。這可能也更快。 – extracrispy

+0

@LukeH謝謝,更新。 – dlev

1

我想你想實際的SQL是

SELECT DISTINCT UserID FROM myTable 

集團通過在做同樣的事情,它的特定用途的副作用。

我相信相同的語法可能在LINQ語句語法中有效,但是dlev表示可以工作,雖然我不確定它是否正確地轉換爲SQL,因爲它不在語句語法中。

如果我錯了,L2S會正確轉換他的版本,那麼通過一切手段dlev的掛鉤。

0

您的查詢爲您提供了羣組。如果你只是想要鑰匙,你應該得到鑰匙。

IQueryable<IGrouping<int, Record>> query1 = 
    from r in myTable 
    group r.UserID by r.UserID; 

IQueryable<int> query2 = 
    from r in myTable 
    group r.UserID by r.UserID into g 
    select g.Key; 

    //alternatively 
query1 = myTable.GroupBy(r => r.UserID); 
query2 = query1.Select(g => g.Key);