我搜索了堆栈溢出,但只查找了最大ID的示例,我想找到某些特定条件的最大ID。像这样的东西
var nRow = from p in ctx.FormControls
. where p.FormObjectsId == FormID
. select Max(p.Id);
怎么做?
答案 0 :(得分:5)
你可以这样做:
var max = ctx.FormControls.Where(r => r.FormObjectsID == FormID)
.Max(r => r.Id);
使用您的查询表达式,您可以执行以下操作:
var nRow = (from p in ctx.FormControls
where p.FormObjectsId == FormID
select p.Id).Max();
答案 1 :(得分:2)
如果你真的喜欢查询表达式,你可以表达"过滤器和投影"然后使用Max
扩展方法:
var query = from p in ctx.FormControls
where p.FormObjectsId == FormID
select p.ID;
var maxID = query.Max();
如果需要,可以在没有中间变量的情况下执行此操作,但是当您需要将它们放在括号等中时,我发现查询表达式会变得很难看。
我个人会使用Max
的重载来允许您指定内联投影,但是......在这一点上,使用查询表达式表单没有任何好处 - 只需使用扩展名方法和lambda表达式一直:
var maxID = ctx.FormControls
.Where(p => p.FormObjectsId == FormID)
.Max(p => p.ID);
不要忘记所有这些都使用延迟执行,直到Max
调用(使用立即执行) - 例如,如果这是针对LINQ to SQL或实体框架执行的,整个查询将转换为SQL。
答案 2 :(得分:1)
something.Where(t => t.something> 0).Max(w => w.other);
甚至Max of where
答案 3 :(得分:0)
按ID Descending排序,本质上可以获得最大ID。
var nRow = (from p in ctx.FormControls
where p.FormObjectsId == FormID
select p.ID).OrderByDescending(x => x.p.ID);
答案 4 :(得分:0)
查询语法:
var nRow = (from p in ctx.FormControls where p.FormObjectsId == FormID select p.Id).Max();