C# LINQ,如何使用“获取最大ID”;其中;条件

C# LINQ,如何使用“获取最大ID”;其中;条件,c#,linq,C#,Linq,我已经搜索了堆栈溢出,但只找到了max-ID的示例,我想找到一些特定条件下的max-ID。像这样的 var nRow = from p in ctx.FormControls . where p.FormObjectsId == FormID . select Max(p.Id); 怎么做 something.Where(t => t.something> 0).Max(w => w.other); 甚至是最大的在哪里 甚至最大

我已经搜索了堆栈溢出,但只找到了max-ID的示例,我想找到一些特定条件下的max-ID。像这样的

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

something.Where(t => t.something> 0).Max(w => w.other);     
甚至是最大的在哪里

甚至最大的where

您可以这样做:

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();
你可以这样做:

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

只需按ID降序,自然会得到最大ID

var nRow = (from p in ctx.FormControls
           where p.FormObjectsId == FormID
           select p.ID).OrderByDescending(x => x.p.ID);

只需按ID降序,自然会得到最大ID

var nRow = (from p in ctx.FormControls
           where p.FormObjectsId == FormID
           select p.ID).OrderByDescending(x => x.p.ID);
查询语法:

var nRow = (from p in ctx.FormControls  where p.FormObjectsId == FormID   select p.Id).Max();
查询语法:

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

如果您真的喜欢查询表达式,可以表示“过滤器和投影”,然后使用
Max
扩展方法:

var query = from p in ctx.FormControls
            where p.FormObjectsId == FormID
            select p.ID;
var maxID = query.Max();
如果需要,可以不使用中间变量,但我发现当需要将查询表达式放在括号中时,它们会变得丑陋

我个人会使用的重载允许您内联指定投影,但是。。。在这一点上,使用查询表达式表单没有任何好处-只需一直使用扩展方法和lambda表达式即可:

var maxID = ctx.FormControls
               .Where(p => p.FormObjectsId == FormID)
               .Max(p => p.ID);

不要忘记,所有这些都使用延迟执行,直到调用
Max
调用(使用立即执行)-因此,例如,如果这是针对LINQ to SQL或实体框架执行的,则整个查询将转换为SQL。

如果您真的喜欢查询表达式,可以表示“过滤器和投影”然后使用
Max
扩展方法:

var query = from p in ctx.FormControls
            where p.FormObjectsId == FormID
            select p.ID;
var maxID = query.Max();
如果需要,可以不使用中间变量,但我发现当需要将查询表达式放在括号中时,它们会变得丑陋

我个人会使用的重载允许您内联指定投影,但是。。。在这一点上,使用查询表达式表单没有任何好处-只需一直使用扩展方法和lambda表达式即可:

var maxID = ctx.FormControls
               .Where(p => p.FormObjectsId == FormID)
               .Max(p => p.ID);
不要忘记,所有这些都使用延迟执行,直到调用
Max
调用(使用立即执行)-因此,例如,如果这是针对LINQ to SQL或实体框架执行的,则整个查询将转换为SQL