Почему первый query.ToList() работает, а второй нет?

моя проблема связана с методом ToLinq():

Я не понимаю, почему первый запрос работает без проблем, но второй дает мне исключение, например:

(тип узла выражения LINQ arrayIndex n не поддерживается в LINQ to Entities)

            var q = from a in ctx.ImmImmobilisations select a;
            q = q.Where(x => x.CodeEntite      == "EDEF");
            q = q.Where(x => x.CodeAffectation == "000001");
            q = q.Where(x => x.Unite           == "ITS");
            q = q.OrderBy(x => x.CodeImmobilisation);
            List<ImmImmobilisation> res = q.ToList();

            var query = from e in ctx.ImmImmobilisations select e;
            if (!string.IsNullOrEmpty(args[0])) query = query.Where(x => x.CodeEntite      == args[0]);
            if (!string.IsNullOrEmpty(args[1])) query = query.Where(x => x.CodeAffectation == args[1]);
            if (!string.IsNullOrEmpty(args[2])) query = query.Where(x => x.CodeFamille     == args[2]);
            if (!string.IsNullOrEmpty(args[3])) query = query.Where(x => x.CodeCCout       == args[3]);
            if (!string.IsNullOrEmpty(unite))   query = query.Where(x => x.Unite      == unite);
            query = query.OrderBy(x => x.CodeImmobilisation);
            var ress = query.ToList();

person user1702980    schedule 27.09.2012    source источник


Ответы (3)


вы не можете использовать индексаторы с LINQ для сущностей. Вам нужно сохранить значение этого индекса в новой переменной.

так:

var arg1 = args[0];    
if (!string.IsNullOrEmpty(arg1)) query = query.Where(x => x.CodeEntite == args1);
person Thousand    schedule 27.09.2012

В вашем исключении совершенно явно указывается ваша проблема: вы не можете использовать элементы массива внутри выражения L2Entities.

person Serg Rogovtsev    schedule 27.09.2012

Вы также можете добиться этого, используя метод Equals следующим образом:

if (!string.IsNullOrEmpty(args[0])) 
   query = query.Where(x => Equals(x.CodeEntite, args[0]) );
person HatSoft    schedule 27.09.2012