2017-03-02 35 views
1

我想要选择一个对象的列表,在一个相当长的连接/选择使用Linq实体编写为Lambda表达式的结尾......这是我所拥有的目前有以下两种说法。Linq实体使用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)); 

我想这样做,是

.Select(x => x.FormDef) 

最终where子句中结合了两个查询,并使用返回的FormDefId而不必从一个单独的查询使用formDefId。

这是可能的东西吗?

预先感谢您的帮助

回答

0

这是写这个使用的查询语法容易得多。每个查询from语法相当于SelectMany在lambda语法。这允许您在范围内具有所有变量。

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 
+0

这样做了,谢谢! –