1

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

3 回答 3

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");
于 2012-12-13T07:16:25.403 回答
3

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

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

if (query.Any())
于 2012-12-13T07:20:24.363 回答
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");
 }
于 2012-12-13T07:16:45.073 回答