如果匹配记录不可用,则获取任何单个记录 - Linq
Take any single record if matching records not available - Linq
我有一个包含多个记录的 linq 查询,我正在使用 where
子句过滤这些记录。
现在,如果筛选的记录 return 什么都没有,那么我需要将其设为默认值,以采用列表中的默认 任何单个 记录。
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
计数 0
,我需要来自 resultStaffGua
的一条记录。谢谢
if result count 0, I need one record from parentList.
有时显而易见的解决方案是最好的。为什么不在您的代码后添加这个?
if (resultStaffGua.Count() == 0)
{
resultStaffGua = parentList.First();
}
如果你想成为 "clever" 并在一行中完成所有操作(我想这很可能会节省数据库事务)你可以将你的 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...); //The whole query except the "where"
var resultStaffGua = query.SingleOrDefault(i=>i.IsPrimary==true) ?? query.First();
否则,如果查询实际上 return 多个结果:
var query = (from s in...);
var resultStaffGua = query.Where(i=>i.IsPrimary==true);
if(resultStaffGua.Count() == 0) resultStaffGua = new[] { query.First(); }
我有一个包含多个记录的 linq 查询,我正在使用 where
子句过滤这些记录。
现在,如果筛选的记录 return 什么都没有,那么我需要将其设为默认值,以采用列表中的默认 任何单个 记录。
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
计数 0
,我需要来自 resultStaffGua
的一条记录。谢谢
if result count 0, I need one record from parentList.
有时显而易见的解决方案是最好的。为什么不在您的代码后添加这个?
if (resultStaffGua.Count() == 0)
{
resultStaffGua = parentList.First();
}
如果你想成为 "clever" 并在一行中完成所有操作(我想这很可能会节省数据库事务)你可以将你的 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...); //The whole query except the "where"
var resultStaffGua = query.SingleOrDefault(i=>i.IsPrimary==true) ?? query.First();
否则,如果查询实际上 return 多个结果:
var query = (from s in...);
var resultStaffGua = query.Where(i=>i.IsPrimary==true);
if(resultStaffGua.Count() == 0) resultStaffGua = new[] { query.First(); }