请帮助我将此SQL查询转换为Linq
SELECT convert(varchar, data_acquisto, 101) as data , SUM(quantita)
FROM Acquisto
WHERE data_acquisto >= DATEADD(month,-1,GETDATE())
GROUP BY convert(varchar, data_acquisto, 101)
这是我尝试过的:
var a = from acq in ctx.Acquisto
where acq.data_acquisto >= data
group acq.data_acquisto.ToString("dd/MM/yyyy")
by new { acq.data_acquisto, acq.quantita } into x
select new ListaGrafico()
{
data = x.Key.data_acquisto.ToString("dd/MM/yyyy"),
qta = Convert.ToInt32(x.Key.quantita)
};
这是我得到的错误:
LINQ to Entities无法识别方法'System.String ToString(System.String)'
分组看起来不正确-Sql仅按DateTime
列的Date部分分组。LinqIGrouping
将包含按每个分组分组的所有值Key
,因此不需要匿名分组类。
Convert()
从Linq到Sql的转换将很困难,因此在应用谓词并在Linq到Objects的转换之后,我已经将数据具体化到了内存中。
恐怕我使用了Lambda语法:
var result = ctx.Acquisto
.Where(acq => acq.data_acquisto >= DateTime.Now.AddMonths(-1))
.ToList()
.GroupBy(acq => acq.data_acquisto.Date)
.Select(x => new ListaGrafico
{
data = x.Key.Date.ToString("dd/MM/yyyy"),
qta = x.Sum(acq => acq.quantita)
});
另外,如果可能的话,我会建议保持Date
在一个DateTime
优先于结构string
-这将意味着改变data
的财产ListaGrafico
,从string
到DateTime
,然后你可以省略.ToString("dd/MM/yyyy")
在最后的Select
投影。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句