Я хотел бы получить список элементов как составную часть составного ключа группы. Но до сих пор я не мог написать запрос, чтобы сделать это.Как добавить список к ключу в группе Linq to Sql В
Мы показываем общий запас на RawMaterial (подробнее об этой модели), и мы хотели бы перечислить вместе с поставщиками для каждого RawMaterial. Я попробовал этот запрос:
var list = this.Stocks.Where(x => x.StockType == StockTypeEnum.RawMaterialEntered)
.GroupBy(i => new { RawMaterialId = i.RawMaterial.Id, RawMaterial = i.RawMaterial.Name,
Suppliers = i.RawMaterial.Suppliers.Select(j=> new { Id= j.Supplier.Id, Name = j.Supplier.Name}) })
.Select(g => new StockSummary
{
TotalAmount = g.Sum(i => i.Amount),
ComponentId = g.Key.RawMaterialId,
Component = g.Key.RawMaterial,
Suppliers = g.Key.Suppliers.Select(h=> new StockItemModel(){ Id = h.Id, Name = h.Name}).ToList()
})
.OrderByDescending(g => g.Component).ToList();
Он строит, но когда я пытаюсь запустить его, я получаю это исключение:
первого шанса исключение типа «System.NotImplementedException» произошло в NHibernate. dll
Мы пробовали разные подходы, но ничего не работало. Можно ли получить желаемый результат только одним запросом?
У меня есть эта модель:
public class Stock
{
public RawMaterial RawMaterial{ get; set; }
public int Amount { get; set; }
}
public class RawMaterial
{
public int Id{ get;set; }
public string Name { get;set; }
public IList<SupplierInfo> SupplierInfos{ get;set; }
}
public class SupplierInfo
{
public int Id{ get;set; }
public Supplier Supplier { get;set; }
}
public class Supplier
{
public int Id { get;set; }
public string Name { get; set; }
}
Первоначально мы имели сетку, где мы показываем каждый общий запас доступных для сырья. Мы получаем эту информацию с этим запросом:
var list = this.Stocks.Where(x => x.StockType == StockTypeEnum.RawMaterialEntered)
.GroupBy(i => new { RawMaterialId = i.RawMaterial.Id, RawMaterial = i.RawMaterial.Name })
.Select(g => new StockSummary
{
TotalAmount = g.Sum(i => i.Amount),
ComponentId = g.Key.RawMaterialId,
Component = g.Key.RawMaterial,
})
.OrderByDescending(g => g.Component).ToList();
Эти данные отображаются в виде таблицы примерно так:
И теперь, как уже упоминалось выше, мы хотели бы показать список поставщиков, которые предоставили указанные компоненты. Можно ли все это сделать в одном запросе?
Вы ищете решение для спящего режима или SQL Server решение? Я не мог помочь вам спящий режим, но в sql-сервере вы можете легко использовать материал и для xml. Взгляните сюда. http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-microsoft-sql-server-2005 –
Вы группируете данные по списку в вызове GroupBy? Насколько я знаю, ни NHibernate, ни EF не поддерживают такую операцию. –
Я бы сказал, нет, вы не можете сделать это в одном запросе. Получите все результаты по первому запросу, загрузите их все из базы данных и сгруппируйте их в своем приложении. Я не уверен, что вы хотите сделать, даже в SQL. – Sidewinder94