【发布时间】:2015-03-12 12:25:32
【问题描述】:
我有一个c#代码如下
var deptSalesQuery =
from d in db.DashboardFigures
join s in outlets.Split(',').Select(x => int.Parse(x)) on d.OutletNo equals s
where (d.TypeOfinformation == "SALES")
group d by new
{
d.Number
} into newGroupedresult
select new DeptSales()
{
Dn = (int)newGroupedresult.Key.Number,
Qs = (double)newGroupedresult.Sum(d => d.Value_4),
Se = (double)newGroupedresult.Sum(d => d.Value_2),
Si = (double)newGroupedresult.Sum(d => d.Value_3)
+ (double)newGroupedresult.Sum(d => d.Value_2)
};
当我传入 Outlets = "1,2,3,4,....一直到 110" 时,软件崩溃,告诉我嵌套语句太多。
有什么方法可以删除 JOIN 并在 WHERE 子句中添加一些内容来帮助解决这种情况?
谢谢
【问题讨论】:
-
您可以使用
Contains方法检查outlets.Split(',').Select(x => int.Parse(x))是否包含d.OutletNo -
类似
where outlets.Split(',').Select(int.Parsex).Contains(d.OutletNo) && d.TypeOfinformation == "SALES" -
在 EF 中,
Contains(stackoverflow.com/questions/8898564/…) 似乎没有最大限制。您使用的是 EF 还是 Linq-to-SQL? -
我会先在主 Linq 查询之外进行拆分和解析。
-
@xanatos,我正在使用 EF。我也尝试了 WHERE 子句中的语句,但错误是 LINQ to Entities 无法识别 Split