你好我写LINQ查询来获取最大计数与来自两个表的列。 我写的SQL查询,它下面是。
select MAX(p.dispalyOrder) from NCT_Process p INNER JOIN NCT_Process_Settings s ON
p.projectId =s.projectId AND p.level=s.level
我试图如下LINQ。
dbObject = (from c in entityObject.NCT_Process_Settings
join process in entityObject.NCT_Process on c.projectId equals process.projectId
join level in entityObject.NCT_Process on c.level equals level.level
select new settingsobject
{
MAX(p.dispalyOrder) to some propert of settingsobject
}).Tolist();
我不知道如何从进程表中最大的显示顺序。 任何帮助,将不胜感激。 谢谢。
您只需选择值,然后调用Max
的查询。 还加入你必须创建匿名类与要匹配的列多列。
max = (from c in entityObject.NCT_Process_Settings
join p in entityObject.NCT_Process
on new { c.projectId, c.level } equals new { p.projectId, p.level }
select p.dispalyOrder).Max();
如果您有其他栏目也希望聚合,那么你可以通过在一个恒定值做一组。
result = (from c in entityObject.NCT_Process_Settings
join p in entityObject.NCT_Process
on new { c.projectId, c.level } equals new { p.projectId, p.level }
group new{c,p} on 1 into grp
select new {
MaxDisplayOrder = grp.Max(x => x.p.dispalyOrder),
AvgOfSomething = grp.Avgerage(x => x.c.Something),
MinOfASum = grp.Min(x => x.p.SomeNumber + x.c.SomeOtherNumber)
}).Single();
注意使用的Single
,因为在一个恒定的一群只会造成一行。
或者,如果你只是想获得由另一列分组的最大显示顺序,然后做到这一点
result = (from c in entityObject.NCT_Process_Settings
join p in entityObject.NCT_Process
on new { c.projectId, c.level } equals new { p.projectId, p.level }
group p.displayOrder on c.Id into grp
select new {
MaxDisplayOrder = grp.Max(),
Id = grp.Key
}).ToList();
请注意, Key
是无论你在之后把on
和grp
是值的集合之前的on
。 在这种情况下,可以有多个结果,所以你最好使用ToList
运行查询。