我有这段代码:
在这里,我从数据库中获取长篇清单:
IQueryable<long> query = from t in table select t.LongId
在这里我尝试从这些ID获得最大值:
long max = query.Any() ? query.Max() : 0;
但是无论查询结果有多长,max总是设置为0.
你知道为什么吗?
答案 0 :(得分:4)
如果
long max = query.Any() ? query.Max() : 0;
返回零,然后下列之一为真:
在定义查询和从查询中获取最大值之间修改表时,可能出现第一种情况。请记住 - query
没有任何数据。它是唯一的查询定义,只有在执行查询时才会获得数据(例如,调用Any()或Max())。
测试:
List<long> table = new List<long> { 1, 2, 3 };
var query = from t in table select t; // query is not executed
table.Clear(); // modify data source before query is executed
Assert.False(query.Any()); // execute query on modified data source
答案 1 :(得分:2)
这不会更简单吗?
long max = table.OrderByDescending(t => t.LongId)
.Select(t => t.LongId)
.FirstOrDefault() ?? 0;
答案 2 :(得分:1)
最简单的方法:
var maxId = table.OrderByDescending(x => x.LongId).First().LongId;