将 LINQ 中的循环缩短为一个 QUERY

下面是我在循环中执行的一段代码:


一开始,在第一个查询中,我获得了位置 ID 列表。这个清单可能很长。


最终,我需要找到哪个 LocationIdFamiliId > 0


我已经在循环中完成了它,但我想在一个问题中完成它。这可能吗?如果可能的话,如何实现?


var locationIds = context.TblUsersDistricts

 .Where(d => d.UserId == userId && d.ValidityTo == null)

 .Select(x => x.LocationId).ToList();


int familyId = 0;


foreach(var item in locationIds) {

   familyId = (from I in context.TblInsuree 

   join F in imisContext.TblFamilies on I.FamilyId equals F.FamilyId 

   join V in imisContext.TblVillages on F.LocationId equals V.VillageId 

   join W in imisContext.TblWards on V.WardId equals W.WardId 

   join D in imisContext.TblDistricts on W.DistrictId equals D.DistrictId 

   where(I.Chfid == chfid &&

   D.DistrictId == item &&

   F.ValidityTo == null &&

   I.ValidityTo == null &&

   V.ValidityTo == null &&

   W.ValidityTo == null &&

   D.ValidityTo == null) 

   select F.FamilyId)

  .FirstOrDefault();


 if (familyId > 0) break;

};


ibeautiful
浏览 106回答 1
1回答

小怪兽爱吃肉

听起来你想要:var familyId = (    from item in locationIds    from I in context.TblInsuree     // ... etc    && D.ValidityTo == null)     select F.FamilyId)    .FirstOrDefault();?
打开App,查看更多内容
随时随地看视频慕课网APP