2010-05-07 45 views

回答

1

单独提取值可能更容易,但您可以使用匿名类型。

var aggregates = new { 
Count = context.TableName.Count(), 
Sum = context.TableName.Sum(t => t.Amount), 
Avg = context.TableName.Avg(t => t.Amount), 
Min = context.TableName.Min(t => t.Amount), 
Max = context.TableName.Max(t => t.Amount) 
}; 
+0

想要产生5个单独的查询? – 2010-05-07 15:25:50

+4

你不能这样做,否则在LINQ中,这些方法是'终结者' – argh 2010-05-07 15:30:20

2

你可以这样做:

var result = new 
{ 
    Count = db.TableName.Count(), 
    Sum = db.TableName.Sum(r => r.Amount), 
    Average = db.TableName.Avg(r => r.Amount), 
    Min = sb.TableName.Min(r => r.Amount), 
    Max = db.TableName.Max(r => r.Amount)   
} 
4

HACK ALERT,但它的作品。通过一个条件,要力图您记录所有的人分享:

var result = from g in db.Employees 
     group g by g.Id.GetType() == typeof(int) into gg 
     select new 
     { 
      Count = gg.Count(), 
      Sum = gg.Sum(x => x.Salary) 
     }; 

这将生成SQL:

SELECT COUNT(*) AS [Count], SUM([t1].[Salary]) AS [Sum] 
FROM (
SELECT 1 AS [value], [t0].[Salary] 
FROM [dbo].[Employee] AS [t0] 
) AS [t1] 
GROUP BY [t1].[value] 

有涉及子查询,但嘿!它只有一分贝旅行

+2

+1或者只是'g组到gg' – Magnus 2011-05-30 17:10:02

相关问题