在此示例代码中
public Company GetCompanyById(Decimal company_id)
{
IQueryable<Company> cmps = from c in db.Companies
where c.active == true &&
c.company_id == company_id
select c;
return cmps.First();
}
如果cmps
中有无数据,我该如何处理?
cmps
永远不会为空,那么如何在 LINQ查询中检查非现有数据?
所以我可以避免这个
'cmps.ToList()' threw an exception of type ... {System.NullReferenceException}
将其转换为例如列表
GetCompanyById(1).ToList();
我始终需要将其封装在try catch
块中吗?
答案 0 :(得分:15)
您可以使用Queryable.Any()(或Enumerable.Any())查看cmps
中是否有成员。这将允许您进行显式检查,并按照您的意愿处理它。
如果你的目标是在没有匹配的情况下返回null
,只需在你的return语句中使用FirstOrDefault而不是First:
return cmps.FirstOrDefault();
答案 1 :(得分:5)
如何申请.Any或.Count()?
以下是MSDN上的示例
List<int> numbers = new List<int> { 1, 2 };
bool hasElements = numbers.Any();
Console.WriteLine("The list {0} empty.",
hasElements ? "is not" : "is");
或者只使用?:运算符
return myExample.Any() ? myExample.First() : null;
答案 2 :(得分:2)
如果有的话,这将返回第一个,如果没有,则返回null:
return (from c in db.Companies
where c.active == true &&
c.company_id == company_id
select c).FirstOrDefault();
答案 3 :(得分:1)
尝试return cmps.Count()==0?null:cmp.First()
这样如果它为null,它将只返回一个null公司,如果不是,那么它将返回列表中的第一个。
答案 4 :(得分:1)
var context = new AdventureWorksLT2008Entities();
var cust = context.Customers.Where(c => c.CustomerID == 1);
if (cust.Any())
{
Customer c = cust.First();
}