同じ質問をする人を何度か見つけましたが、(理論的には)かなり簡単なはずですが、答えは決して満足のいくものではなかったようです。これが私の質問です:
「Company」というエンティティがあり、その中にentityCollection「Employees」(1対多)があります。すべての会社を取得する必要があり、それぞれについて、21歳を超える年齢の従業員のみが必要です。
私は試した :
Return context.Companies.Include("Employees").Where(c => c.Employees.Where(e => e.Age > 21).Count() > 0)
21を超える会社が少なくとも1つある場合は、各会社のすべての従業員が表示されるため、これは機能しません(実際には、.Any()と同じです)。
私は試した :
Return context.Companies.Include("Employees").Select(c => New Company {
.Id = c.Id,
.Employees = c.Employees.Where(Function(e) e.Age > 24)
}).ToList()
これも機能しませんでしたが(完璧だったと思いますが)、次のエラーが発生します。エンティティまたは複合型'MyModel.Company'をLINQtoEntitiesクエリで作成できません。
21歳以上の従業員だけですべての会社を選択するにはどうすればよいですか?現時点では、すべてを選択し、クライアント側で従業員をフィルタリングしていますが、そのソリューションは好きではありません。
誰かが私を助けることができますか?
Morteza Manavi-Parastに感謝します、それは仕事をします!
それでも、一意のクエリで実行することがEntityFrameworkに実装されていないことを私はほとんど確信していません。それはとても一般的な状況です...証明として、このフォーラムには私のような質問がたくさんあります。
私は驚いています...多分次のリリースのために?
明確にするために、クエリの結果をデータグリッドに直接バインドしているため、会社のリストが必要です。参考までに、データグリッドの行をクリックすると(会社を選択すると)、entityCollectionからの従業員(21歳以上)が入力された2番目のグリッドがあります。