【发布时间】:2021-07-12 12:32:52
【问题描述】:
我无法在 EntityFrameWork 上编写此查询。这很简单,但我还不知道 EF。* 我需要 EF 上的 4 个表左连接。
select ProductId,Name,ValueName,Value from ProductTechnicalInfo p
left join ProductTechnicalInfoParameter pp on pp.ProductTechnicalInfoId = p.Id
left join ProductTechnicalInfoValue v on v.ProductTechicalInfoId = p.Id
left join ProductTechnicalInfoValueParameter vp on vp.TechnicalValuesId=v.Id
where ProductId = 22
我的 EF 代码:
var infos = infoProductsRep.Join(transaction.ProductTechnicalInfoParameter, p => p.Id, pp => pp.ProductTechnicalInfoId, (ProductTechnicalInfo, ProductTechnicalInfoParameter) => new
{
ProductTechnicalInfo,
ProductTechnicalInfoParameter
}).Join(transaction.ProductTechnicalInfoValue, p => p.ProductTechnicalInfo.Id, v => v.Id, (Info, Value) => new
{
Info,
Value
}).Join(transaction.ProductTechnicalInfoValueParameter, p => p.Value.Id, vp => vp.TechnicalValuesId, (Info, Result) => new
{
Info,
Result
}).Where(x => x.Info.Info.ProductTechnicalInfo.ProductId == product.Id).ToList();
【问题讨论】:
-
你最好把它留在 SQL 中。使用原始 EF 查询来执行它。见docs.microsoft.com/en-us/ef/core/querying/raw-sql
-
仅供参考,如果您在数据库中建立关系并正确设置了实体,您应该很少需要加入。
-
谢谢罗伯特
-
@aaliakinci 真正的答案是
you don't need joins if you configure relations -
您使用的是 EF 6 还是 EF Core?您标记您正在使用 asp.net-core,所以我假设您正在使用 EF Core。 EF Core 中的查询引擎已重写,因此您还需要提供 EF 版本号。
标签: c# sql entity-framework linq asp.net-core