LINQ - 如果查询不存在的元素,则结果不为空

时间:2012-12-13 07:14:54

标签: c# linq null

目前,我有一张包含数据水果,等级和价格的表格。我的表中可用的等级是 A B C 请查看代码段。正如您所看到的,我将 D 放在where过滤器中。我想query将为空。但是在我运行代码之后,程序会提示“Not Null?WTH?”。那么,我可以知道query中的内容以及如果不在表格中如何检测 D 吗?

p / s:我是新手

C#代码段:

 var query = (from p in db
              where p.grade == "D"
              select p.price).ToArray();

 if (query == null)
              System.Console.WriteLine("You get Null in the query");
 else if (query != null)
              System.Console.WriteLine("Not Null? WTH?");

3 个答案:

答案 0 :(得分:4)

由于您正在执行ToArray,因此它永远不会为空。你可以查看长度。

if(query.Length <= 0)

如果你这样做会更好:

var query = (from p in db
            where p.grade == "D"
            select p.price).Count();

if(query > 0)

var ifItemExist = (from p in db
                   where p.grade == "D"
                   select p.price).Any();

或更短:

var ifItemExist = db.Any(p=> p.grade == "D");

答案 1 :(得分:3)

您不会为null,因为此方法仍会返回数组。该数组将为空,但该数组不为null。 (这实际上是为什么存在null ...它是区分“零”值和缺少值。

如果您想测试结果中是否有任何元素可以使用:

if (query.Any())

答案 2 :(得分:2)

实际上,它不是null,它返回一个与null不同的空数组。

或者,你可以这样做,

int query = (from p in db
              where p.grade == "D"
              select p.price).Count();

 if (query > 0)
 {
    System.Console.WriteLine("Found");
 }
  else
 {
    System.Console.WriteLine("Not Found");
 }