我这里有一个从我的数据库用LINQ获取数据的问题。
我有两个表Team
和TeamMember
,它们通过 1-N 的关系相关联。
我正在使用Entity Framework,每个表都有一个实体,每个列都有一个属性。还有在Team实体中有一个导航属性TeamMember
,作为这个关系的结果。
我想做一个查询,可以得到所有我的Team及其成员。
result = (from t in this.context.Teams
orderby t.Name
select t)
.Include("TeamMembers")
这很好。我得到了一个Team Entities的集合,其中Team.TeamMember
属性填充了每个团队成员的数据。
问题是当我想要进行更复杂的查询时,比如筛选TeamMembers时。
例如,两个表都有一个名为EndDateTime
的列。如果我想获取所有未结束的团队和团队成员(他们的结束日期时间不为空),我不知道该怎么做。
通过这个查询,我将只过滤团队,而不是团队成员。
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);
}
}
但我认为这不是一个好的解决方案。