我在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。 如何更改代码?
答案 0 :(得分:3)
如果您不想检查DetailsRecords是否为null,而是检查源序列是否为空,则使用此答案(我对LINQ用法的调整方式略有不同):
int iNumber = iContext.DetailsRecords.Select(x => (int?)x.Number).Max() ?? 0;
Enumerable.Max Method (IEnumerable<Int32>)
:InvalidOperationException -
source不包含任何元素。Enumerable.Max Method (IEnumerable<Nullable<Int32>>)
:如果源序列为空或仅包含null值,则此函数返回null。答案 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();