Asi*_*xea 9 c# linq entity-framework
我在使用LINQ从数据库中获取数据时遇到问题
我有两个表Team和TeamMember,它们通过相关的1-N的关系.我正在使用实体框架,每个表都有一个实体,每个列都有一个属性.同样在Team实体中TeamMember,由于此关系,存在导航属性.
我想进行查询,我可以将他的所有团队与团队成员联系起来.
result = (from t in this.context.Teams
orderby t.Name
select t)
.Include("TeamMembers")
Run Code Online (Sandbox Code Playgroud)
这很好.我得到了一个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();
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我有点"解决"它在查询后对成员进行过滤,到集合.像这样:
//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);
}
}
Run Code Online (Sandbox Code Playgroud)
但我认为这根本不是一个好的解决方案.
正如我所指出的,我认为这是重复的。但总结一下答案,您只需将Where子项的子句包含在语句中Select(通过将其用作匿名类型的一部分),枚举查询,然后检索所需的对象即可。
因为您已将所需的属性选择TeamMembers到另一个属性中,所以将从数据库中检索它们并在对象图中构造它们。
result = (from t in this.context.Teams
where t.EndDateTime == null
orderby t.Name
select new
{
Team = t,
Members = t.TeamMembers.Where(tm => tm.EndDateTime == null)
})
.ToList()
.Select(anon => anon.Team)
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5205 次 |
| 最近记录: |