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