通过linq比较无值

时间:2012-11-12 18:43:58

标签: c# linq

我在sql server 2008数据库/表中有一个整数列(非空),我想检索它。

  // go to the table and get the largest number, if none exists, use 0.
        int iNumber = iContext.DetailsRecords.Max(x => x.Number); // from entity

但是从一开始,这张桌子就是空的。我想设置为0。 如何更改代码?

5 个答案:

答案 0 :(得分:3)

如果您不想检查DetailsRecords是否为null,而是检查源序列是否为空,则使用此答案(我对LINQ用法的调整方式略有不同):

Max or Default?


int iNumber = iContext.DetailsRecords.Select(x => (int?)x.Number).Max() ?? 0;

答案 1 :(得分:2)

试试这个:
 int iNumber = iContext.DetailsRecords==null? iContext.DetailsRecords.Max(x => x.Number) : 0;

int iNumber = iContext.DetailsRecords.Any()? iContext.DetailsRecords.Max(x => x.Number) : 0;如果table不为null且包含0条记录。

答案 2 :(得分:2)

您可以使用DefaultIfEmpty。如果序列为空,它将返回提供的项目作为序列中的唯一项目,否则它将返回原始序列。

IEnumerable<int> numbers = new int [] { };

numbers.DefaultIfEmpty(0).Max();

答案 3 :(得分:0)

使用Any功能查看是否有任何记录:

int iNumber = iContext.DetailsRecords.Any() 
              ? iContext.DetailsRecords.Max(x => x.Number) 
              : 0;

答案 4 :(得分:0)

我知道这已经有了接受的答案,但另一个好方法就是FirstOrDefault()。

int iNumber = iContext.DetailsRecords.OrderByDescending(x => x.Number).FirstOrDefault();

我经常使用这种方式,如果结果为null,也可以让你设置一个新对象。

 MyObject m = mySearch.GetItems.Where(a => a.id == id).FirstOrDefault() ?? new MyObject();