Имея проблемы с получением данных из Northwind с помощью Linq-на-SQL из 3-х таблиц:Группировка без дублирования поставщиков строки
Suppliers
Products
Categories
Я хотел бы принести поставщики всех продуктов, которые относятся к категории с categoryId > 3
. Для набора результатов потребуется 1 строка для каждого поставщика, а затем некоторый набор дочерних элементов, содержащий строку для каждого продукта, включая информацию о категории. Идея заключается в том, что этот результат будет возвращен как json-значение из вызова ajax.
Ниже простейший вариант моих усилий до сих пор:
from sups in Suppliers
join prods in Products on sups.SupplierID equals prods.SupplierID
join cats in Categories on prods.CategoryID equals cats.CategoryID
where (cats.CategoryID > 3)
group sups by sups.SupplierID into g
select g
В LINQPad это выглядит как ResultSet содержит много дублирующих поставщиков. Любые мысли?
РЕДАКЦИЯ: Благодаря ответу Adduci, я в конечном итоге со следующим утверждением рабочего LINQ:
from sups in Suppliers
join prods in Products on sups.SupplierID equals prods.SupplierID
join cats in Categories on prods.CategoryID equals cats.CategoryID
where cats.CategoryID > 3
group new { sups, prods, cats } by new { sups.SupplierID, sups.CompanyName } into g
select new
{
g.Key,
ProductInfo = from x in g
select new
{
ProductProperty = x.prods.ProductName,
CategoryProperty = x.cats.CategoryName
}
}
Дополнительным by new { sups.SupplierID, sups.CompanyName }
завершает набор результатов, включая полей поставщик. Ницца!
Я вижу, что вы исправили опечатка g.prods к x.prods. Большое спасибо!! Прекрасно работает! – Paul0515
Я только что понял, есть еще одна проблема: главная информация о поставщике содержит только значение ключа, а productinfo ... может быть расширено с другими свойствами поставщика (ex CompanyName?) – Paul0515
@ Paul0515 - Да. Вы можете добавить 'CompanyName = g.FirstOrDefault(). Sups.CompanyName'или ваш способ может быть даже лучше – Aducci