我有这样的实体:我该如何改进这个Linq查询(一种旋转)?
public class Delivery
{
public int Id { get; set; }
public int ProductId { get; set; }
public int CustomerId { get; set; }
public int Quantity { get; set; }
public DateTime DeliveryDate { get; set; }
public virtual Product Product { get; set; }
public virtual Customer Customer { get; set; }
}
我想显示按周交货,所以我写这篇文章的查询:
public override IEnumerable GetModelData(ApplicationDbContext context)
{
return context.Deliveries.GroupBy(x => x.Product).Select(x => new
{
Id=x.Key.Id,
Product = x.Key.Name,
Wk1 =(int?) x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 1).Sum(a => a.Quantity),
...
...
...
Wk46 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 46).Sum(a => a.Quantity),
Wk47 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 47).Sum(a => a.Quantity),
Wk48 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 48).Sum(a => a.Quantity),
Wk49 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 49).Sum(a => a.Quantity),
Wk50 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 50).Sum(a => a.Quantity),
Wk51 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 51).Sum(a => a.Quantity),
Wk52 = (int?)x.Where(a => SqlFunctions.DatePart("wk", a.DeliveryDate) == 52).Sum(a => a.Quantity),
}).ToList();
}
是否有可能得到一个更小的查询的预期目标?
我在这一刻有大约100个样本在交货数据库表中排成行,而我有这种填充方式来获取数据并不是最好的。
该查询正在工作,我只想知道你是否想到了写这种查询的更好方法。
我不明白你的逻辑或你的代码。你说你想按周显示交货。你能详细说明吗?什么是'Wk1,Wk2等'? –
我正在显示一个包含53列的表格,第一列是ProductName,接下来的52列是从week1(wk1)到week52(wk52)一年中的几周。在上面的查询中,我删除了一些行以显示较小的查询。 –
哇,你检查了生成的SQL吗?由于关于分组结果的52个Where语句,我期望它是一个怪物。你用什么ORM btw? –