3

i m в настоящее время меняет код доступа к данным с L2S на сущность framework db. У меня есть проблемы с запросами, как следующийstring.Join в запросах Linq to Entity

var emps = (from emp in DataContext.setupEmployees 
         let contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact) 
         select new 
         { 
          EmployeeName = emp.EmployeeName, 
          Contacts = string.Join(", ", contacts.ToArray()) 
         }).ToList(); 

EF говорит мне, что не может преобразовать метод string.join в хранимых выражениях. Очевидным Обходной привести объекты в памяти (ToList, AsEnumerable и т.д.), а затем вызвать метод string.Join как

var emps = (from emp in DataContext.setupEmployees 
         let contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact) 
         select new 
         { 
          EmployeeName = emp.EmployeeName, 
          Contacts = contacts 
         }).ToList().Select(x=>new{ 
          x.EmployeeName, 
          Contacts = string.Join(", ",x.Contacts) 
         }); 

Это решение отлично работает, но его только, что его более громоздким, а я должен был бы дублировать выберите пункт в большом количестве запросов, которые отлично работали в L2S.
Мой вопрос: Есть ли способ, которым я могу избежать написания этого вопроса ToList и вызова string.Join и подобных методов в запросе `EF '?

+0

http://stackoverflow.com/questions/4215066/entity -framework-with-linq-aggregate-to-concatenate-string – Andreas

+0

http://stackoverflow.com/questions/4095658/how-do-i-concatenate-strings-in-entity-framework-query – Andreas

ответ

3

Я бы порекомендовал создать Contacts в качестве типа данных IEnumerable<string> вместо string datatype. Вы можете не использовать Contacts производить любой вывод, который вы хотели через запятую и т.д. ...

Вы можете изменить свой запрос, чтобы выглядеть следующим образом:

var emps = (from emp in DataContext.setupEmployees 
      select new 
      { 
       EmployeeName = emp.EmployeeName, 
       Contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact) 
      }).ToList(); 
Смежные вопросы