string.Join в запросах Linq to Entity - PullRequest
3 голосов
/ 16 февраля 2012

В настоящее время я перевожу свой код доступа к данным из L2S в базу данных Entity Framework db.У меня проблема с такими запросами, как:

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)
                       });

. Это решение отлично работает, но оно более многословно, и яЯ должен продублировать предложение select во многих запросах, которые раньше нормально работали в L2S.

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

1 Ответ

3 голосов
/ 05 июля 2012

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

...