2017-03-02 322 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

這樣做了,謝謝! –