Linq to Entities 使用 Lambda 表达式和多个 where 条件
Linq to Entities using Lambda Expressions and multiple where conditions
我正在尝试 select 相当长的 joins/selects 链末端的对象列表,使用 Linq to Entities 编写为 Lambda 表达式...这是我目前拥有的以下两个陈述。
var formDefId = _unitOfWork.AsQueryableFor<FormTrack>()
.Where(x => x.FormTrackId == formTrackId)
.Select(x => x.FormDefId).First();
var rules = _unitOfWork.AsQueryableFor<FormTrack>()
.Where(x => x.FormTrackId == formTrackId)
.Select(x => x.FormDef)
.SelectMany(x => x.Events
.Where(y => y.EventTypeId == 7))
.Select(x => x.RuleGroup)
.SelectMany(x => x.Rules)
.SelectMany(x => x.RuleFormXmls
.Where(y => y.FormDefId == formDefId));
我想做的是结合两个查询,并使用
返回的 FormDefId
.Select(x => x.FormDef)
在最后的 where 子句中,而不必使用来自单独查询的 formDefId。
这有可能吗?
提前感谢您的帮助
使用查询语法写这个要容易得多。查询语法中的每个 from
对应于 lambda 语法中的 SelectMany
。这允许您拥有范围内的所有变量。
var rules =
from ft in _unitOfWork.AsQueryableFor<FormTrack>()
from e in ft.FormDef.Events
from r in e.RuleGroup.Rules
from x in r.RuleFormXmls
where ft.FormTrackId == formTrackId
where e.EventTypeId == 7
where x.FormDefId == ft.FormDefId
select x
我正在尝试 select 相当长的 joins/selects 链末端的对象列表,使用 Linq to Entities 编写为 Lambda 表达式...这是我目前拥有的以下两个陈述。
var formDefId = _unitOfWork.AsQueryableFor<FormTrack>()
.Where(x => x.FormTrackId == formTrackId)
.Select(x => x.FormDefId).First();
var rules = _unitOfWork.AsQueryableFor<FormTrack>()
.Where(x => x.FormTrackId == formTrackId)
.Select(x => x.FormDef)
.SelectMany(x => x.Events
.Where(y => y.EventTypeId == 7))
.Select(x => x.RuleGroup)
.SelectMany(x => x.Rules)
.SelectMany(x => x.RuleFormXmls
.Where(y => y.FormDefId == formDefId));
我想做的是结合两个查询,并使用
返回的 FormDefId.Select(x => x.FormDef)
在最后的 where 子句中,而不必使用来自单独查询的 formDefId。
这有可能吗?
提前感谢您的帮助
使用查询语法写这个要容易得多。查询语法中的每个 from
对应于 lambda 语法中的 SelectMany
。这允许您拥有范围内的所有变量。
var rules =
from ft in _unitOfWork.AsQueryableFor<FormTrack>()
from e in ft.FormDef.Events
from r in e.RuleGroup.Rules
from x in r.RuleFormXmls
where ft.FormTrackId == formTrackId
where e.EventTypeId == 7
where x.FormDefId == ft.FormDefId
select x