2013-10-01 6 views
2

У меня есть следующая сущность я хочу произвести поиск по .. как я могу объединить два поля, чтобы получить правильный ввод ..Как объединить два поля в linq?

что-то вроде этого

var personnels = dbContext.Set<Personnel>() 
          .Where(p => 
          (p.FirstName + ' ' + p.Surname).Contains("John Smith") 
         ); 

Когда я, что он говорит

Невозможно создать постоянное значение типа «System.Object». В этом контексте поддерживаются только примитивные типы или типы перечислений.

Это код, который я пытаюсь исправить

var personnels = dbContext.Set<Domain.Entities.App.Personnel>().Where(p => 
      ((p.GivenName + p.Surname).Contains(criteria.PersonnelName) || String.IsNullOrEmpty(criteria.PersonnelName)) 
      && (p.PersonnelRoleId == criteria.PersonnelRoleId || (criteria.PersonnelRoleId ?? 0) == 0) 
      && (((criteria.ActiveOnly && (p.ActiveFlag)) || (criteria.ActiveOnly == false)))).AsEnumerable(); 

Код работает, но он работает только тогда, когда критерием является JohnSmith не Джон Смит ..

поэтому линия это

(p.GivenName + p.Surname).Contains(criteria.PersonnelName) 

, как я могу получить место в там

(p.GivenName + ' ' + p.Surname).Contains(criteria.PersonnelName) 

не работает

+0

Возможный дубликат [Использование содержит() в LINQ to SQL] (http://stackoverflow.com/questions/2369022/using-contains-in-linq-to-sql) –

ответ

0
Where(x => String.Format("{0} {1}", x.FirstName, x.LastName).Contains("John Smith")).AsEnumerable(); 
+0

Могу ли я использовать содержит? – user2206329

+0

@ user2206329 Да, вы тоже должны быть в состоянии - не знаете, почему вы не просто используете равных? – James

+0

для поиска по диким картам .. если кто-то входит в «john». Я хочу, чтобы он нашел что-нибудь со словом «john» в нем ... Я предположил, что, используя равные, он просто находит только «john», и ни один из другие, которые содержат слово john – user2206329

2

поэтому вместо того, чтобы использовать

(p.GivenName + ' ' + p.Surname).Contains(criteria.PersonnelName) 

Я использовал

(p.GivenName + " " + p.Surname).Contains(criteria.PersonnelName) 

Только разница в кавычки ...

и это работает

+0

'' имеет тип char, а символ "" имеет тип string. Обычно компилятор C# переводит строку + char + string правильно, строки NameName и Surname или что-то еще? – khyperia

+0

они являются строками – user2206329

+0

Как правило, этот тип не является проблемой, однако 'char' не считается примитивным типом EF, поэтому я могу понять, почему это не получится. – James

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