Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果匹配记录不可用,则获取任何单个记录-Linq_C#_.net_Linq_Linq To Entities - Fatal编程技术网

C# 如果匹配记录不可用,则获取任何单个记录-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

我有一个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.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
count
0
,我需要
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
谢谢您的回答。我本可以想到它,但我想要的解决方案,所以我可以在一行。谢谢你的回答。我本可以想到它,但我想要的解决方案,所以我可以在一行。非常感谢。