2010-08-25 52 views
1

假設我有兩個表:類別和產品。我想用linq-to-sql來選擇所有具有重複產品的類別(含產品)。 我的查詢是這樣的:如何使用linq-to-sql group列出重複記錄?

from p in db.Products 
group p by p.CategoryId into c 
select new 
{ 
categoryId = c.Key, 
products = from PbyC in c 
group PbyC by PbyC.Name into dupl 
where dupl.Count() > 1 
select dupl; 
} 

它的工作原理,但LINQPad列出空的分類(沒有任何重複的產品)。如何修改查詢?

將類別名稱以某種方式顯示而不是Id會很好。

編輯:我有表之間的關係。

+0

你會得到沒有相關產品的分類?我正在閱讀這個查詢的方式,這應該是不可能的,因爲你只是查詢產品表... – 2010-08-25 13:42:49

+0

結果是IOrderedQueryable >。所以類別ID列表和重複產品的嵌套列表。有些類別實際上是空的,但顯示。 – jlp 2010-08-25 14:52:07

回答

0
db.Products.GroupBy(p => new { p.Name, p.CategoryId }) 
      .Select(g => new { g.Key.CategoryId, Count = g.Count }) 
      .Where(ng => ng.Count > 1) 
      .Select(ng => ng.CategoryId); 

那將具有相同名稱的多個產品選擇類別的ID,並假設你沒有對象之間建立任何關係,所以你需要加入結果到Categories表獲取詳細信息。

如果你有一個關係成立,那麼你可以隨時更改CategoryIdCategory(或任何相關的對象被命名),只是選擇在最後SelectCategory.Name

+0

我有表格之間的關係。 – jlp 2010-08-25 14:48:36