2011-04-01 68 views
0

好吧,我試圖找到從我的數據庫(使用查詢結果整形)屬於我提供的類別的所有子類別。我的班級子類別包含類別列表<>類別。LINQ,如何指定包含來自List <>的項目

問題是,在linq語句中,g指的是子類別(它最後包含類別<>)。所以下面的聲明是不允許的。

如何更改Linq語句以生成正確的SQL查詢以包含包含匹配類別的所有SubCategories。

public class SubCategory 

    { 
     public int SubCategoryId { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
     public List<Article> Articles { get; set; } 
     public List<Category> Categories { get; set; } 
    } 

//incorrect code below: 
var SubCategories = storeDB.SubCategories.Include("Categories").Single(g => g.Name == category); 

回答

1

我覺得有點讓人困惑,每個子類別都可以屬於多個類別 - 您是否有正確的關係?

無論如何,我認爲它可能是更具可讀性,如果你改變選擇對分類工作的第一個 - 即是這樣的:

var subCatQuery = from cat in storeDB.Categories 
        where cat.Name == category 
        select cat.SubCategories; 

然後你就可以執行,讓您的IEnumerable <>:

var subCategories = subCatQuery.ToList(); 

我發現更可讀/可以理解。


(我也找到了查詢語法更容易讀到這裏比流利式)

+0

事實上,一個子類別可以屬於更多的類別(例如:夾克belond到貓男人和女人,上衣只屬於貓女人)。無論如何,您的更改會導致以下錯誤:{「傳遞到字典中的模型項的類型爲'System.Data.Entity.Infrastructure.DbQuery'1 [System.Collections.Generic.List'1 [Project1.Models.SubCategory ]]',但是這個字典需要一個'System.Collections.Generic.IEnumerable'1 [Project1.Models.SubCategory]'類型的模型項。「} – 2011-04-01 10:19:16

+0

這聽起來像你還沒有真正執行過查詢 - 我會添加一行... – Stuart 2011-04-01 12:57:13

1

這爲我工作(也許是太簡單):

var Category = storeDB.Categories.Include("SubCategories").Single(c => c.Name == category); 
return Category.SubCategories; 
0

我的首選答案會使用linq連接。如果只有2個數據集,則可以使用linq操作.join.groupjoin與a from語句。這將是我的方法。

Dictionary<MainQuery, List<subQuery>> Query = 
    dbStore.List<MainQuery>.include("IncludeAllObjects") 
    .groupjoin(db.List<SubTable>.Include("moreSubQueryTables"), 
    mainQueryA=>mainQueryA.PropToJoinOn, 
    subQueryB => sunQueryB.PropToJoinOn, 
    ((main, sub)=> new {main, sub}) 
    .ToDictionary(x=>x.main, x=>x.sub.ToList()); 
相關問題