Лучший отвечающий
Сложный запрос в Linq

Вопрос
-
Здравствуйте, необходимо сделать выборку запросом
Первая таблица:
Есть товар(номер), он продаётся в разных городах,
соответственно в одном городе может быть много-много магазинов, где его продают.
+ ID
Вторая таблица
Есть список городов(не повторяющихся) всех всех + их ID
Хочется сделать так, чтобы получить список городов из первой
таблицы(чтобы не повторялись) и соответствующие id им из второй таблицы
Подскажите пожалуйста - как это можно сделать??!??25 ноября 2011 г. 10:51
Ответы
-
> Есть товар(номер), он продаётся в разных городах [...] много магазинов, где его продают. [...] Есть список городов [...] получить список городов из первой таблицы(чтобы не повторялись) и соответствующие id им из второй таблицы
т.е. надо получить список городов, в которых хоть что-то продается.var products = new[] { new { Name = "p0", Id = 0 }, new { Name = "p1", Id = 1 }, new { Name = "p2", Id = 2 }, }; var cities = new[] { new { Name = "c0", Id = 0 }, new { Name = "c1", Id = 1 }, new { Name = "c2", Id = 2 }, new { Name = "c3", Id = 3 }, new { Name = "c4", Id = 4 }, }; var shops = new[] { new { City = 0, Products = new [] { 0, 1 } }, new { City = 0, Products = new [] { 1, 2 } }, new { City = 1, Products = new [] { 0 } }, };
var cids = from s in shops group s by s.City into g select g.Key; var res = from cid in cids join c in cities on cid equals c.Id select c; foreach (var c in res) System.Diagnostics.Trace.WriteLine(c);
или такvar ret = from cid in (from s in shops select s.City).Distinct() join c in cities on cid equals c.Id select c; foreach (var c in res) System.Diagnostics.Trace.WriteLine(c);
результат:
{ Name = c0, Id = 0 } { Name = c1, Id = 1 }
27 ноября 2011 г. 3:21
Все ответы
-
> Есть товар(номер), он продаётся в разных городах [...] много магазинов, где его продают. [...] Есть список городов [...] получить список городов из первой таблицы(чтобы не повторялись) и соответствующие id им из второй таблицы
т.е. надо получить список городов, в которых хоть что-то продается.var products = new[] { new { Name = "p0", Id = 0 }, new { Name = "p1", Id = 1 }, new { Name = "p2", Id = 2 }, }; var cities = new[] { new { Name = "c0", Id = 0 }, new { Name = "c1", Id = 1 }, new { Name = "c2", Id = 2 }, new { Name = "c3", Id = 3 }, new { Name = "c4", Id = 4 }, }; var shops = new[] { new { City = 0, Products = new [] { 0, 1 } }, new { City = 0, Products = new [] { 1, 2 } }, new { City = 1, Products = new [] { 0 } }, };
var cids = from s in shops group s by s.City into g select g.Key; var res = from cid in cids join c in cities on cid equals c.Id select c; foreach (var c in res) System.Diagnostics.Trace.WriteLine(c);
или такvar ret = from cid in (from s in shops select s.City).Distinct() join c in cities on cid equals c.Id select c; foreach (var c in res) System.Diagnostics.Trace.WriteLine(c);
результат:
{ Name = c0, Id = 0 } { Name = c1, Id = 1 }
27 ноября 2011 г. 3:21 -