2011-04-15 35 views
1

T-SQL的查询,如:如何让聚集的投影在一组

select sum(amount), min(amount), max(amount) from sales where salesdate < getDate() 

似乎难以转化为LINQ到的entites。

在第一想我会尝试

var result = from s in entites.Sales where s.SalesDate < DateTime.Today 
group s by 1 into g 
select new { 
AmountSum = g.Sum(x=> x.amount), 
AmountMin= g.Min(x=>x.amount), 
AmountMax= g.Max(x=>x.amount)} 

这实际上是实现了T-SQL在做同样的事情的最好方法?很显然,EF生成的SQL包括一个组,这让我有些担心。

+0

你有没有试过把g组删除掉?我认为你可以做到这一点没有问题,然后它不应该通过声明产生一组。 – Tejs 2011-04-15 20:00:24

+0

如果我将组1删除1,那么我该怎么把总和关掉? – 2011-04-15 20:03:40

回答

1

您可以通过在你的查询变化做到这一点 - 用样本字典来说明:

Dictionary<int, int> sampleDictionary = new Dictionary<int, int>(); 

sampleDictionary.Add(4, 5); 
sampleDictionary.Add(7, 8); 
sampleDictionary.Add(1, 2); 

var val = new 
{ 
    Max = sampleDictionary.Max(x => x.Key), 
    Min = sampleDictionary.Min(x => x.Key), 
    Sum = sampleDictionary.Sum(x => x.Key) 
}; 

Console.WriteLine(val); 
Console.ReadKey(); 

这将选择最大值,最小值,以及按键的总和到一个新的匿名对象。你可以这样写:

var set = entites.Sales.Where(x => x.SalesDate < DateTime.Today); 

var val = new 
{ 
    Max = set.Max(x => x.Key), 
    Min = set.Min(x => x.Key), 
    Sum = set.Sum(x => x.Key) 
};