【发布时间】:2012-03-03 07:46:31
【问题描述】:
我的以下查询在 LINQ to SQL 中运行良好。现在我想把它改成Entity Framework
var _sale = from emp in setupEmployees
join sales in vwSaleTargets on emp.EmployeeID equals sales.EmployeeID
join price in vwPeriodPricings
on new { sales.SKUID, sales.PeriodID }
equals new { SKUID = (int?)price.SKUID, PeriodID = (int?)price.PeriodID }
join sk in setupSKUs on sales.SKUID equals sk.SKUID
join br in setupBrands on sk.BrandID equals br.BrandID
where emp.EmployeeID == 123 && sales.StartDate.Year == 2012
select new { emp, sales, price, sk, br };
var lstSale = _sale.ToList(); //to avoid n+1 queries in case of grouping
var sale2 = from x in lstSale
group x by new { x.sk, x.emp } into grouping
select new
{
EmployeeName = grouping.Key.emp.EmployeeName,
SKUID = grouping.Key.sk.SKUID,
SKUName = grouping.Key.sk.Title,
MonthSale =(double?)grouping
.Where(x => x.sales.StartDate.Month == 2 &&
x.sales.StartDate.Year == 2012)
.Select(t=>t.sales.SalesQuantity)
.Sum(t=>t.Value)?? 0,
MonthSaleValue = (double?)grouping
.Where(x => x.sales.StartDate.Month == 2 &&
x.sales.StartDate.Year == 2012)
.Sum(x => x.sales.SalesQuantity * x.price.ExFactoryPrice)
?? 0,
};
Console.WriteLine(sale2.OrderBy(x => x.SKUName).ToList());
在实体框架中它给了我这样的结果
Name SKUID SKUName MonthSale MonthSaleValue
EMP1 36 SKU1 113 61375.95
EMP1 17 SKU2 113 6656.83
EMP1 18 SKU3 113 9984.68
EMP1 19 SKU4 113 15169.12
在 L2S 中,我得到了这样的正确结果
Name SKUID SKUName MonthSale MonthSaleValue
EMP1 36 SKU1 74 40193.1
EMP1 17 SKU2 113 6656.83
EMP1 18 SKU3 461 40733.96
EMP1 19 SKU4 2 268.48
问候
【问题讨论】:
-
我已经编辑了很多格式 - 标签不能很好地与 Markdown 配合使用。
-
谢谢!请看一下这个问题。我的主要问题是所有 sku 的月度销售重复
-
我刚刚注意到
ToList()部分 - 这意味着您应该能够看到lstSale中的差异,因为其余部分将在 LINQ to Objects 中完成。 -
我正在制作列表以避免 N+1 查询。如果我删除 tolist() 查询需要很长时间才能执行
-
这本身就很有趣。但我会尽量简化它,以便找出问题所在。
标签: c# linq entity-framework linq-to-sql entity-framework-4