C# 如果匹配记录不可用,则获取任何单个记录-Linq
我有一个linq查询,它有多个记录&我使用C# 如果匹配记录不可用,则获取任何单个记录-Linq,c#,.net,linq,linq-to-entities,C#,.net,Linq,Linq To Entities,我有一个linq查询,它有多个记录&我使用where子句过滤这些记录 现在,如果过滤后的记录没有返回任何内容,那么我需要将其设置为默认值,从列表中获取任何一条记录 var resultStaffGua = (from s in _db.Students join sg in _db.StudentStaffGuardians on s.StudentID equals sg.StudentId join g in _db.Staffs on sg.StaffId equals g.Staff
where
子句过滤这些记录
现在,如果过滤后的记录没有返回任何内容,那么我需要将其设置为默认值,从列表中获取任何一条记录
var resultStaffGua = (from s in _db.Students
join sg in _db.StudentStaffGuardians on s.StudentID equals sg.StudentId
join g in _db.Staffs on sg.StaffId equals g.StaffID
join lr in _db.luRelationTypes on sg.RelationTypeId equals lr.RelationTypeID
join ga in _db.StaffAddresses on g.StaffID equals ga.StaffID
join ad in _db.Addresses on ga.AddressID equals ad.AddressID
where
lse.StatusID == (int?)Extension.StatusType.Active
&& lse.TenantID == tenantid
select new
{
g.FirstName,
g.LastName,
IsPrimary = sg.IsPrimaryGuardian,
se.Email,
Phone = sphon.PhoneNumber,
lr.RelationCD,
gdnr.GenderCD,
ad.Zipcode
}).Where(i=>i.IsPrimary==true);
如果resultStaffGua
count0
,我需要resultStaffGua
中的一条记录。多谢各位
如果结果计数为0,我需要父列表中的一条记录
有时候,显而易见的解决方案是最好的。为什么不在你的代码后面加上这个呢
if (resultStaffGua.Count() == 0)
{
resultStaffGua = parentList.First();
}
如果您想变得“聪明”,并且在一行中完成所有操作(我想这也可能会节省一个DB事务),您可以将Where
交换为OrderBy
和Take
因此,不是:
).Where(i=>i.IsPrimary==true);
你可以做:
).OrderBy( i => i.IsPrimary ? 0 : 1 ).Take(1);
这将对IsPrimary
设置为true的任何记录进行优先级排序,但无论是否有匹配项,它都将得到一条记录
如果结果计数为0,我需要父列表中的一条记录
有时候,显而易见的解决方案是最好的。为什么不在你的代码后面加上这个呢
if (resultStaffGua.Count() == 0)
{
resultStaffGua = parentList.First();
}
如果您想变得“聪明”,并且在一行中完成所有操作(我想这也可能会节省一个DB事务),您可以将Where
交换为OrderBy
和Take
因此,不是:
).Where(i=>i.IsPrimary==true);
你可以做:
).OrderBy( i => i.IsPrimary ? 0 : 1 ).Take(1);
这将对
IsPrimary
设置为true的任何记录进行优先级排序,但无论是否匹配,它都会得到一条记录。假设您的目的是检索一条记录(最多有一条记录的IsPrimary==true
):
否则,如果查询实际上可以返回多个结果:
var query = (from s in...);
var resultStaffGua = query.Where(i=>i.IsPrimary==true);
if(resultStaffGua.Count() == 0) resultStaffGua = new[] { query.First(); }
假设您的目的是检索一条记录(最多有一条记录的
IsPrimary==true
):
否则,如果查询实际上可以返回多个结果:
var query = (from s in...);
var resultStaffGua = query.Where(i=>i.IsPrimary==true);
if(resultStaffGua.Count() == 0) resultStaffGua = new[] { query.First(); }
什么
结果
?什么父列表
?除此之外,我不明白这个问题question@MickyD-请看我的更新问题。@CGPA6.4,您是否尝试了以下由JohnWu提供的答案?@er shoaib-John answer直截了当地回答。我本可以想到的。我愿意做一行。谢谢。结果如何?什么父列表
?除此之外,我不明白这个问题question@MickyD-请看我的更新问题。@CGPA6.4,您是否尝试了以下由JohnWu提供的答案?@er shoaib-John answer直截了当地回答。我本可以想到的。我愿意做一行。谢谢,谢谢你的解决方案。我不能在一行中完成,这样我就需要额外的query
变量。结果将直接进入resultStaffGua
谢谢您的解决方案。我不能在一行中完成,这样我就需要额外的query
变量。结果将直接进入resultStaffGua
谢谢您的回答。我本可以想到它,但我想要的解决方案,所以我可以在一行。谢谢你的回答。我本可以想到它,但我想要的解决方案,所以我可以在一行。非常感谢。