は私が1-N関係によって関連している2つのテーブルTeam
とTeamMember
を、持っているLINQLINQ複雑なクエリナビゲーションプロパティ
と私のデータベースからデータを取得し、ここで問題を抱えています。 私はEntity Frameworkを使用していますが、各列のプロパティを持つテーブルごとに1つのエンティティがあります。また、チームエンティティには、この関係の結果としてTeamMember
ナビゲーションプロパティがあります。
チームメンバーとすべてのチームを取得できるクエリを実行したいと思います。
result = (from t in this.context.Teams
orderby t.Name
select t)
.Include("TeamMembers")
これは問題なく動作します。 Team.TeamMember
プロパティに各チームのメンバーのデータが入力されたチームエンティティのコレクションを取得します。
問題は、TeamMembersのクエリをフィルタリングするような、より複雑なクエリを実行したいときです。
たとえば、両方のテーブルには列EndDateTime
があります。終了していないすべてのチームメンバーとチームメンバーを取得したい場合(終了日時はnullではありません)、どうやって行うのかわかりません。
このクエリでは、チームのみをフィルタリングしますが、チームメンバはフィルタリングしません。
result = (from t in this.context.Teams
where t.EndDateTime == null
orderby t.Name
select t)
.Include("TeamMembers")
.ToList();
私は、クエリの後にメンバーのフィルタをコレクションに行うことを「解決」します。このように:
//Filter out the End dated care coordiantors
var careCoordinatorsToDelete = new List<CareCoordinator>();
foreach (var team in result)
{
careCoordinatorsToDelete.Clear();
foreach (var careCoordinator in team.CareCoordinators)
{
if (careCoordinator.EndDateTime != null)
careCoordinatorsToDelete.Add(careCoordinator);
}
foreach (var toDelete in careCoordinatorsToDelete)
{
team.CareCoordinators.Remove(toDelete);
}
}
しかし、これはまったく良い解決策ではないと思います。
[条件付き包含のエンティティへのlinq?](http://stackoverflow.com/questions/1085462/conditional-include-in-linq-to-entities) –
+1これは大きな質問です。 EFとはあまり関係のないことがありますが、それは重複しています。私は他にもいくつか重複があると思います。 –
別の複製:http://stackoverflow.com/questions/1680863/linq-include-with-where-clause –