C# 在LINQ中将循环缩短为一个查询
下面是我在循环中执行的一段代码: 首先,在第一个查询中,我得到一个位置ID列表。清单可能很长 最后,我需要找到哪个LocationIdC# 在LINQ中将循环缩短为一个查询,c#,linq,C#,Linq,下面是我在循环中执行的一段代码: 首先,在第一个查询中,我得到一个位置ID列表。清单可能很长 最后,我需要找到哪个LocationIdFamiliId>0 我已经做了一个循环,但我想做一个问题。可能吗?如果可能,如何实现 var locationIds = context.TblUsersDistricts .Where(d => d.UserId == userId && d.ValidityTo == null) .Select(x => x.Location
FamiliId>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;
};
听起来你想要:
var familyId=(
来自LocationId中的项
来自context.TblInsuree中的I
//…等等
&&D.ValidityTo==null)
选择F.FamilyId)
.FirstOrDefault();
是的,就是这个。谢谢,我认为他们需要
FirstOrDefault(id=>id>0)
,因为一旦id大于0,他们就会中断。尽管所有id都是负数,但它们的代码将取与最后一个locationId
相关的第一个id。在我看来,id>0
行用于表示id!=默认值(int)
。在这种情况下,您最好去掉familyId变量,并使用.AnyAsync()
代替FirstOrDefaultAsync()代码>(或者它们的非异步版本,如果这是您想要的)。