2011-04-01 9 views
0

の項目を含む方法を指定する方法Ok、私が提供するカテゴリに属している(クエリ結果整形を使用して)データベースからすべてのサブカテゴリを取得しようとしています。私のクラスのサブカテゴリにはカテゴリのリスト<が含まれています。LINQ、List <>

問題はlinqステートメントで、gはSubCategory(最終的にはカテゴリ<>を含む)を参照していることです。したがって、以下のステートメントは許可されていません。

一致するカテゴリを含むすべてのサブカテゴリを含む正しいSQLクエリを生成するようにLinq文を変更するにはどうすればよいですか。

答えて

1

私は、各サブカテゴリが複数のカテゴリに属していることが少しわかりました - あなたはこの関係を正しい方向に持っていますか?

あなたが最初にカテゴリー上で動作するように選択を変更した場合にかかわらず、私はそのおそらくより読みやすいと思います - すなわちのようなもの:あなたが、その後> <あなたのIEnumerableを取得するために実行することができ

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

var subCategories = subCatQuery.ToList(); 

私はそれがはるかに読みやすく理解できることがわかります。


(私もここに流暢なスタイルよりも読みやすいクエリ構文を見つける。)

+0

実際、サブカテゴリは、より多くのカテゴリに属する​​ことができます(例:猫の男性と女性のジャケット、ブラウスは猫の女性のみ)。とにかく、次のエラーが発生しました:{"辞書に渡されるモデルアイテムの型は、 'System.Data.Entity.Infrastructure.DbQuery'1です。[System.Collections.Generic.List'1 [Project1.Models.SubCategory ]] 'この辞書には、' System.Collections.Generic.IEnumerable'1 [Project1.Models.SubCategory] ​​'というモデル項目が必要です。 "} –

+0

実際にはまだクエリを実行していないようです行を追加します... – Stuart

1

これが(多分単純すぎる)私の仕事:

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

私の好適な答えはになりますlinq joinを使用します。データセットが2つしかない場合は、linq操作.join.groupjoinと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()); 
関連する問題