0

私はEFとLINQ to EFを学んでいます。LINQ 式ではなく LINQ メソッドを使用しています。

2 つのエンティティから非常に単純なクエリを実行しようとしています。

NavigationGroup は、NavigationGroupLocation に対する 1 対多の関係です。NavigationGroup のナビゲーション プロパティは「NavigationGroupLocations」と呼ばれます

私の考えでは、このコードは機能するはずです:

 List<NavigationGroup> groups = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Location == 1).ToList();

Location は、NavigationGroupLocation エンティティの int です。

これが機能しない理由と、ナビゲーション プロパティでフィルタリングする適切な方法を誰かが説明できますか? 式の構文で多くの例を見てきましたが、それをメソッドの構文に関連付けることができないようです。

C# 4 & EF 4 を使用しています。

助けてくれてありがとう!

編集

私の Navigation プロパティはコレクションであるため、個々のプロパティにアクセスできないことがわかりました。だから私はこのコードを試しています:

 .Where(g => g.NavigationGroupLocations.Any(l => l.Location == 1));

実行しようとすると、次のエラーが発生します。

 Cannot implicitly convert type 'System.Linq.IQueryable<ME.Data.ECom.NavigationGroup>' to 'System.Data.Objects.ObjectSet<ME.Data.ECom.NavigationGroup>'. An explicit conversion exists (are you missing a cast?)

私は何をすべきですか?

4

2 に答える 2

0

結合を行う必要があります。はアイテムのリストであるため、where 句でプロパティにNavigationGroupLocationsアクセスすることはできません。.Location

于 2012-04-13T18:44:17.070 に答える
0

これはうまくいくようです:

 var query = db.DataModel.NavigationGroups.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));

条件文として使用すると機能しません。

 var query = db.DataModel.NavigationGroups;
 if (selectedLocation > 0)
 {
    query = query.Where(g => g.NavigationGroupLocations.Any(l => l.Location == selectedLocation));
 }

そのとき、エラーが発生します。

于 2012-04-13T19:09:40.023 に答える