Разделенный запятыми список в столбце с использованием linq - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть две таблицы с отношением «один ко многим» между ними, и я хотел бы выполнить запрос linq, который бы взял значения из таблицы «многие» и сгенерировал бы список, разделенный запятыми, из значений, которые связаны с каждымзапись в другой таблице.Я могу выполнить этот запрос в SQL, используя функцию "вещи" и функцию "для пути XML".Например, предположим, у меня есть следующая структура таблицы:

1) Район
столбцы: id, имя
2) Store
столбцы: id, name, districtid

Теперь предположим, что я хотел сгенерировать запрос, возвращающий следующие столбцы: district.id, district.name, stores (список магазинов, связанных с этим районом через запятую)

Как этого можно добиться с помощью linq?

Я бы хотел сделать это без циклов for, одним запросом.

Ответы [ 3 ]

5 голосов
/ 14 ноября 2011

Другие ответы учитывают, что у вас есть свойства навигации.Когда это так, вы должны посмотреть на другие ответы, потому что в этом случае другие ответы намного проще.

var result = 
     from d in Districts
     // gets all the store names in this district
     let st = Stores.Where(s => s.DistrictId == d.Id).Select(s => s.Name)
     select new { Name = d.Name, Id = d.Id, Stores = string.Join(",", st) }
0 голосов
/ 14 ноября 2011

Если вы используете Linq-to-SQL, значит, вы уже создали классы ORM со свойствами навигации, а затем можете просто запустить следующий код (я предполагаю, что Store был превращен в Store_s_ и т. Д. Из-за множественного числа в LINQ) :

  var req = from dis in db.Disticts
            select new { 
                      ID = dis.id, 
                      Name = dis.Name, 
                      Stores = 
                      String.Join(", ", 
                         dis.Stores.Select( a => String.Format("{0}: {1}", a.Id, a.Name))
                       };
0 голосов
/ 14 ноября 2011

Если у вас есть свойства навигации:

var q = from d in context.Districts
select new
{
  DistrictID = d.id,
  DistrictName = d.name,
  Stores = String.Join(", ", d.stores.Select(s => s.name))
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...