2011-05-01 61 views
1

我們有下面的SQL表:使用LINQ查詢獲取計數和不同項目?

Tag 
---------------------------------------- 
ID | tagName  | UserID 
---------------------------------------- 
01 | c++   | 03 
02 | c#   | 03 
03 | asp.net  | 04 
04 | programming | 05 
05 | vb   | 07 
06 | php   | 07 
07 | java  | 12 
08 | class  | 12 

TagRelation 
---------------------------------------- 
ID | tagID | topicID 
---------------------------------------- 
01 | 01  | 22 
02 | 02  | 22 
03 | 08  | 22 
04 | 06  | 12 
05 | 02  | 12 
06 | 04  | 104 
07 | 02  | 104 
08 | 01  | 104 
09 | 02  | 17 
10 | 05  | 17 

現在我想在TagRelation表重複每個標籤與LINQ查詢每個用戶的數量。 我使用了下面的查詢,但它不能編譯,它有一些錯誤。

DataClassesDataContext dbc = new DataClassesDataContext(); 
var query = from q in dbc.Tags 
      where q.UserID == this.UserID 
      from c in dbc.TagRelations 
      where c.tagID == q.id 
      select new 
      { 
       tagName = q.name.Distinct(), 
       repeatNumber = c.Count() 
      }; 

我該怎麼辦?謝謝。

編輯:其實我希望以下結果:

result (if UserID==3) 

------------------------- 
tagName | repeatNumber 
------------------------- 
c++  | 02 
c#  | 01 
+3

您可以通過實現期望的結果 – Ankur 2011-05-01 12:24:57

+0

能否請您發表的示例代碼使用組,我不知道熟悉'group by' – 2011-05-01 12:45:33

回答

3
var q = ... 
     group r by r.TagName into g; 
     select new 
     { 
      TagName = g.Key, 
      Count = g.Count() 
     }; 

foreach (var i in q) 
{ 
    string tagName = i.TagName; 
    int count = i.Count;  
}  
2
from t in dbc.Tags 
where t.UserID == this.UserID 
join r in dbc.TagRelations on t.id equals r.tagID 
group r by t into g 
select new 
{ 
    tagName = g.Key.name, 
    repeatNumber = g.Count() 
}; 
+0

'group by'只是'r'不會給出想要的結果,是嗎? – abatishchev 2011-05-01 13:06:11

+0

@abatishchev,我正在用't'進行分組,並且它將LINQ to Objects給出想要的結果,我希望它能夠對LINQ to SQL做同樣的事情。 – svick 2011-05-01 14:27:07

+0

我的測試顯示'new [] {new Tag {TagName =「c#」},新標籤{TagName =「c#」}} .GroupBy(t => t)'通過引用分組,即每個標籤位於單獨的標籤中。 – abatishchev 2011-05-01 15:28:34