LINQ to Entites: создание разделенной запятыми строки из отношения «многие к одному» - PullRequest
2 голосов
/ 05 марта 2010

У меня есть пара таблиц с отношением многие-к-одному, и я пытаюсь создать строку, которая содержит строку, разделенную запятыми, следующим образом.

Давайте назовем их State и City -Таблица городов имеет FK для State.ID, а государства принадлежат странам:

  var foo =  from item in _ctx.State
             where item.country_id == country_id
             select 
             new { id = item.ID, 
                 names = item.Name + ": " + String.Join(", ", 
                 (from c in _entity.City
                  where c.State.ID == item.ID 
                  select c.City_Name).ToArray())
             };
  return Json(foo.ToList());

Я ищу что-то вроде:

[{id = 3, names = "CA:A, B, C "}, {id = 5, names =" OR: D, E "} и т. Д.

С указанным здесь String.Join (из этого вопроса), Я получаю:

LINQ to Entities не распознает метод метода System.String Join (System.String, System.String []), и этот метод нельзя преобразовать в выражение хранилища..

Есть ли способ сделать это?

1 Ответ

2 голосов
/ 05 марта 2010

Вам нужно разделить ваш запрос на LINQ to Entities (материал БД) и LINQ to Objects (String.Join и другие методы):

var foo =  from item in _ctx.State
           where item.country_id == country_id
           select 
           new 
           { 
               id = item.ID, 
               names = item.Name,
               cities = from c in item.City select c.Name
           };
var bar = from item in foo.AsEnumerable
          select new
          {
              id = item.id, 
              names = item.names + ": " + String.Join(", ", item.cities.ToArray())
          };
return Json(bar.ToList());

Редактировать: Это было близко - мне пришлось изменитьпуть городов был выбран таким образом, чтобы он представлял собой массив строк, а не объектов City.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...