【问题标题】:To many nested statements对许多嵌套语句
【发布时间】: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

标签: c# linq nested


【解决方案1】:

正如 juharr 所写,在查询之前:

int[] splitted = outlets.Split(',').Select(int.Parse);

在查询中:

where splitted.Contains(d.OutletNo) && d.TypeOfinformation == "SALES"

【讨论】:

  • select return IEnumerable 所以第一个字符串引发错误
  • @juharr 非常感谢,这似乎正在工作。更多的测试会告诉你。不过,谢谢你们。
猜你喜欢
  • 2011-02-01
  • 2014-04-20
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 2011-03-21
相关资源
最近更新 更多