1

我在 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。如何更改代码?

4

5 回答 5

3

如果您不想检查 DetailsRecords 是否为空,而是想处理源序列是否为空,请使用此答案(我根据您的 LINQ 使用情况对其进行了一些不同的调整):

最大还是默认?


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

于 2012-11-12T18:53:05.503 回答
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;如果表不为空并且包含 0 条记录。

于 2012-11-12T18:45:52.773 回答
2

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

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

numbers.DefaultIfEmpty(0).Max();
于 2012-11-12T18:46:54.003 回答
0

使用Any函数查看是否有记录:

int iNumber = iContext.DetailsRecords.Any() 
              ? iContext.DetailsRecords.Max(x => x.Number) 
              : 0;
于 2012-11-12T18:48:00.670 回答
0

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

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

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

 MyObject m = mySearch.GetItems.Where(a => a.id == id).FirstOrDefault() ?? new MyObject();
于 2012-11-12T19:10:25.333 回答