我有一个SQL Server查询,我使用LINQ用C#重写了这个查询。
在T-SQL查询中,有一个这样的和:
SELECT Date,
Name,
SUM(1)*(CASE WHEN Name='Sam' && Date=GETDATE() THEN 0.5 ELSE 1 END) AS
ItemCount,
SUM(ProductCount) AS ProductCount
FROM ProductList
GROUP BY Date, Name
我的Linq
var list = _context.ProductList
.GroupBy(t => new {t.Date, t.Name})
.Select(i => new ShipmentList()
{
Date = i.Key.Created,
Name = i.Key.Name,
ItemCount = i.Count(),
ProductCount = i.Sum(x => x.ProductCount)
}).ToList();
当after countitemcount=I.count()
时,我无法完成此情况。我试过了:
ItemCount=I.Count()*I.
这次我无法访问名称和日期ItemCount=I.Count()*Y=>Y.Name bla bla
我再次可以访问任何列。
我该怎么解决这个?
是否需要条件计数
?由于Linq-To-Entities中不支持带有谓词的Enumerable.count
重载,您可以尝试以下方法:
var list=_context.ProductList
.GroupBy(t=> new{ t.Date, t.Name})
.Select(g => new ShipmentList
{
Date = g.Key.Date,
Name = g.Key.Name,
ItemCount= g.Select(x => x.Name == "Sam" && x.Date == DateTime.Now ? 0.5 : 1.0)
.Sum() ,
ProductCount = g.Sum(x => x.ProductCount)
})
.ToList();
再见,那个条件对我来说没有多大意义。但这与您的sql查询相同。