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



目前,我有一个表格,其中包含水果,等级和价格的数据。我的表格中可用的等级是A,BC请查看代码片段。如您所见,我将 D 放入where过滤器中。我想query将是空的。但是在我运行代码后,程序提示"不为空?咦?"。那么,我可以知道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?");

由于您正在执行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");

你不会得到 null,因为此方法仍将返回一个数组。数组将为空,但数组不会为空。(这实际上是 null 存在的原因...它是为了区分"零"值和没有值。

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

if (query.Any())

实际上,它不是空的,它返回一个与 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");
 }

相关内容

  • 没有找到相关文章

最新更新