0

私はEFとLINQ to EFを学習しています。私たちはLINQ式ではなくLINQ式を使用しています。Entity Framework単純LINQメソッドを使用したNavigationPropertyによるフィルタ

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

NavigationGroupは、NavigationGroupLocationと1対多の関係です。 NavigationGroupのナビゲーションプロパティは、このコードは動作するはずです私の心の中で「NavigationGroupLocations」

と呼ばれている:

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

場所は私のNavigationGroupLocationエンティティのintです。

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

私は助けを求める4.

おかげで、C#4 & EFを使用しています!

EDIT

私は私のナビゲーションプロパティコレクションですので、私は、個々のプロパティを取得することができないことがわかります。私は何をしているべきである

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?) 

:私は、私はこのエラーを取得し、それを実行しようとすると

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

:だから私はこのコードをしようとしていますか?

答えて

0

参加する必要があります。 NavigationGroupLocationsは項目のリストなので、where句では.Locationプロパティにアクセスすることはできません。

+0

linqメソッドの構文でどのように結合するのですか?私の編集を見て、.Any()を使って正しい方向に向かっているかどうか確認できますか? – Jared

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)); 
} 

エラーが発生したときです。

+0

Linq式を使用していないのはなぜですか? –

関連する問題