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

C# LINQ-如果查询不存在的元素,则结果不为null,c#,linq,null,C#,Linq,Null,目前,我有一个数据表,包括水果、等级和价格。我的表格中可用的分数是A、B和C。请查看代码片段。正如你所看到的,我把D放在where过滤器中。我想查询将为空。但是在我运行代码之后,程序提示notnull?什么?。那么,我可以知道查询中的是什么,如果D不在表中,如何检测它吗 附言:我是新手 C代码段: var query = (from p in db where p.grade == "D" select p.price).ToArray(

目前,我有一个数据表,包括水果、等级和价格。我的表格中可用的分数是A、B和C。请查看代码片段。正如你所看到的,我把D放在where过滤器中。我想查询将为空。但是在我运行代码之后,程序提示notnull?什么?。那么,我可以知道查询中的是什么,如果D不在表中,如何检测它吗

附言:我是新手

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?");
因为你正在做ToArray,所以它永远不会为空。你可以检查一下长度

if(query.Length <= 0)

或更短:

var ifItemExist = db.Any(p=> p.grade == "D");
因为你正在做ToArray,所以它永远不会为空。你可以检查一下长度

if(query.Length <= 0)

或更短:

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

实际上,它不是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");
 }

实际上,它不是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");
 }

由于此方法仍将返回数组,因此不会得到null。数组将为空,但数组不为空。这就是null存在的原因。。。它是用来区分零值和无值

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

if (query.Any())

由于此方法仍将返回数组,因此不会得到null。数组将为空,但数组不为空。这就是null存在的原因。。。它是用来区分零值和无值

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

if (query.Any())

哦,是的!数组。长度。。。。。。。妈的,我的脑子被困在中午了。谢谢你的解决方案+1 C=哦,是的!数组。长度。。。。。。。妈的,我的脑子被困在中午了。谢谢你的解决方案+1 C=