2015-03-12 2 views
0

у меня есть 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, чтобы помочь ситуации?

Благодаря

+3

Вы можете использовать 'метод Contains' если' точек для проверки .Split (','). Выберите (x => int.Parse (x)) 'содержит' d.OutletNo' –

+0

Что-то вроде 'where outlets.Split (','). Выберите (int.Parsex) .Contains (d.OutletNo) && d.TypeOfinformation == "ПРОДАЖИ" ' – xanatos

+0

В EF не существует максимального предела для 'Contains' (http://stackoverflow.com/questions/8898564/entity-framework-hitting-2100-parameter-limit). Вы используете EF или Linq-to-SQL? – xanatos

ответ

1

Как пишет juharr, перед запросом сделать:

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

и в запросе:

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

'select' return' IEnumerable', поэтому первая строка вызывает ошибку – Grundy

+0

@juharr Большое спасибо, похоже, сейчас работает. больше испытаний расскажет. Однако, спасибо вам обоим. – Alpesh

Смежные вопросы