【发布时间】:2017-06-19 07:52:13
【问题描述】:
简单来说,我需要在实体框架中编写以下 SQL。我宁愿在 Lynq 中进行。 我正在使用 mysql
SELECT `p`.`Id`, p.price, p.categoryid, avg(o.rate)
FROM `Product` AS `p`
LEFT JOIN `Order` AS `o` ON `p`.`Id` = `o`.`ProductId`
group by p.id
到目前为止我所做的如下
var data = from p in _context.Product
join o in _context.Order on p.Id equals o.ProductId into orderTemp
from ord in orderTemp.DefaultIfEmpty()
group p by p.Id into gp
select new
{
p.Id,
p.Price,
p.CategoryId,
gp.Average(m => m.Rate)
};
我一整天都在为此苦苦挣扎。任何帮助都将非常有价值和感激。提前谢谢你。
上述方法不起作用,因为m 正在引用Product 的对象。
【问题讨论】:
-
group p by p.Id into gp将产品组合在一起,您可以尝试group by p.Id into gp并查看 m 引用的对象。或者group by o.ProductId into gp,因为p.Id和o.ProductId无论如何都是相等的。 -
尝试使用
group by p.Id into gp select new { p.Id, p.Price, p.CategoryId, gp.Average(m => m.ord.rate)};。m引用的对象是ord,其中包含连接的Order表。 -
您的 sql 查询不应执行,因为您正在选择未在 group by 子句中列出的列。你试过在sql server中执行sql吗?
-
是
group bylinq 中的有效术语。它给出了这个错误CS1525 Invalid expression term 'by' -
@JenishRabadiya 是的,上面的 SQL 工作正常,并且给了我预期的结果。我正在使用 MySQL。我知道你的意思,但可能是因为 id 是主键,它是这样工作的。无论如何,假设我将查询更改为具有多个分组依据,即使在那时,您能帮我获得上述正确的 linq。
标签: c# entity-framework linq