Конкатенация строк в LINQ to SQL

Есть ли способ создать лямбду Where для конкатенации двух строковых полей, чтобы она правильно делала это в SQL? Допустим, у меня есть человек, и есть два поля: Имя и Фамилия . Я хочу иметь возможность фильтровать по их полному имени, которое отображается на странице как FirstName + LastName .

Я не могу использовать комбинированное свойство, например FullName в linq lambda, потому что SQL не знает, что это такое, и выдает ошибку. Я мог бы сначала запустить запрос, используя .AsEnumerable () перед Where , но это менее эффективно (я думаю?)

Я пробовал .Where (p => (p.FirstName + p.LastName) .Contains (filterText)) , и это выполняется без ошибок, но на самом деле он может фильтровать только по одному за раз. Это похоже на то, как полученный sql говорит WHERE FirstName LIKE% text% OR LastName LIKE% text% вместо поиска конкатенации. Это означает, что мой текст фильтра не может охватывать имя и фамилию. Если я ищу "hn Do" в "John Doe" , я не получаю результатов.

Итак, есть ли правильный способ сделать это в LINQ или мне нужно согласиться на альтернативное решение?

5
задан Tesserex 8 July 2011 в 17:52
поделиться