.NET MVC 3 Поиск в контроллере - PullRequest
1 голос
/ 21 ноября 2011

Я новичок в .NET. Я пытаюсь сделать что-то очень простое. Я хотел бы выполнить поиск по модели в моем контроллере и получить первую возвращенную сущность:

var cercueils = from y in db.Cercueils select y;
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper())
          || z.AncienType.ToUpper().Contains(dr[13].ToUpper()));
Cercueil cercueil = cercueils.First();

Но это не хорошо, так как выдает ошибку:

Le type de nœud « ArrayIndex » de l'expression LINQ n'est pas pris en charge dans LINQ to Entities.

(Google переводчик: «тип узла массива выражений LINQIndex n не поддерживается в LINQ to Entities»)

Как мне этого добиться?

Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 21 ноября 2011

Я считаю, что Linq не знает, как выполнить 'dr [13]' в контексте отложенного выполнения ... попробуйте следующее:

var tmp = dr[13].ToUpper();
var cercueils = from y in db.Cercueils select y;
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(tmp)
          || z.AncienType.ToUpper().Contains(tmp));
Cercueil cercueil = cercueils.FirstOrDefault();

Кроме того, я обычно рекомендую FirstOrDefault с пустой проверкой:)

0 голосов
/ 21 ноября 2011
        var cercueils = (from y in db.Cercueils
                        where y.blahblah = blahblah
                        select y).FirstOrDefault();
0 голосов
/ 21 ноября 2011

Я думаю, что ваше предложение Where() (z => z.Type.ToUpper().Contains(dr[13].ToUpper()) и т. Д.) Не может быть преобразовано в запрос типа SQL, поэтому Linq to Entities выдает вышеупомянутую ошибку.

Вы можете исправить ошибку двумя способами: либо преобразовать выражение, чтобы Linq to Entities мог сгенерировать запрос (у меня был некоторый успех с IndexOf() вместо Contains()), либо просто загрузить всю таблицу и выполнить поиск локально (очевидно, что второй вариант снизит производительность):

var cercueils = (from y in db.Cercueils select y).ToList(); // load the entire dataset
cercueils = cercueils.Where(z => z.Type.ToUpper().Contains(dr[13].ToUpper())
      || z.AncienType.ToUpper().Contains(dr[13].ToUpper()));
Cercueil cercueil = cercueils.First();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...