LINQ,如何使用“where”条件获取Max ID

时间:2014-05-20 13:45:55

标签: c# linq

我搜索了堆栈溢出,但只查找了最大ID的示例,我想找到某些特定条件的最大ID。像这样的东西

var nRow = from p in ctx.FormControls
.          where p.FormObjectsId == FormID
.          select Max(p.Id);

怎么做?

5 个答案:

答案 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();