#c# #linq
#c# #linq
Вопрос:
У меня возникли небольшие проблемы с выполнением этой GroupBy
работы:
select sum(QTDE) from PEDIDO_ITEM group by IDPRODUTO order by 1 desc;
это должен быть подзапрос внутри запроса linq, который выглядит следующим образом:
dynamic list =
(from p in context.PRODUTOes
join c in context.CATEGORIAs
on p.IDCATEGORIA equals c.IDCATEGORIA
where c.IDCATEGORIA == subcategoria
orderby p.IDPRODUTO
select new
{
c.NOMECATEGORIA,
p.DESCRICAO_BREVE,
p.DESCRICAO_COMPLETA,
p.GARANTIA,
p.IDCATEGORIA,
p.DATACADASTRO,
p.IDPRODUTO,
p.LINKPRODUTO,
p.METADESCRICAO,
p.METATAGS,
p.MINIATURA,
p.STATUS,
p.TIPO,
p.TITULO,
p.VALOR,
p.VALOR_PROMOCIONAL,
p.VIEWS,
----> THIS ONE QUANTIDADEVENDIDO = (from item in context.PEDIDO_ITEM where item.IDPRODUTO == p.IDPRODUTO group item by item.IDPRODUTO into q select q),
}
Комментарии:
1. Если ваш подзапрос выбирает элементы для одного IDPRODUTO, зачем вам нужна группа по?
Ответ №1:
Попробуйте выполнить этот запрос:
var query =
from p in context.PRODUTOes
join c in context.CATEGORIAs on p.IDCATEGORIA equals c.IDCATEGORIA
where c.IDCATEGORIA == subcategoria
orderby p.IDPRODUTO
select new
{
c.NOMECATEGORIA,
p.DESCRICAO_BREVE,
p.DESCRICAO_COMPLETA,
p.GARANTIA,
p.IDCATEGORIA,
p.DATACADASTRO,
p.IDPRODUTO,
p.LINKPRODUTO,
p.METADESCRICAO,
p.METATAGS,
p.MINIATURA,
p.STATUS,
p.TIPO,
p.TITULO,
p.VALOR,
p.VALOR_PROMOCIONAL,
p.VIEWS,
QUANTIDADEVENDIDO = context.PEDIDO_ITEM
.Where(x => x.IDPRODUTO == p.IDPRODUTO)
.Sum(x => x.QTDE)
};
Комментарии:
1. Это был именно тот синтаксис, который мне был нужен, но я не понимал, прямо на месте! Большое вам спасибо за помощь!!
Ответ №2:
Попробуйте следовать :
(from p in context.PRODUTOes
join c in context.CATEGORIAs.Where(x => x.IDCATEGORIA == subcategoria) on p.IDCATEGORIA equals c.IDCATEGORIA
join pe in context.PEDIDO_ITEM on p.IDPRODUTO equals pe.IDPRODUTO
orderby p.IDPRODUTO
select new { c = c, p = p, pe = pe})
.OrderBy(x => x.p.IDPRODUTO)
.Select(x => new {
NOMECATEGORIA = x.c.NOMECATEGORIA,
DESCRICAO_BREVE = x.p.DESCRICAO_BREVE,
DESCRICAO_COMPLETA = x.p.DESCRICAO_COMPLETA,
GARANTIA = x.p.GARANTIA,
IDCATEGORIA = x.p.IDCATEGORIA,
DATACADASTRO = x.p.DATACADASTRO,
IDPRODUTO = x.Key,
LINKPRODUTO = x.p.LINKPRODUTO,
METADESCRICAO = x.p.METADESCRICAO,
METATAGS = x.p.METATAGS,
MINIATURA = x.p.MINIATURA,
STATUS = x.p.STATUS,
TIPO = x.p.TIPO,
TITULO = x.p.TITULO,
VALOR = x.p.VALOR,
VALOR_PROMOCIONAL = x.p.VALOR_PROMOCIONAL,
VIEWS = x.p.VIEWS,
QUANTIDADEVENDIDO = x.pe
})
.GroupBy(x => x.IDPRODUTO)
.ToList();
Комментарии:
1. После
GroupBy
этого вы можете выбрать только ключевые поля и результат агрегирования.2. Перемещение Groupby после выбора решает проблему.
3. Лучше просмотрите, что генерируется после такого запроса LINQ.