C# 使用左联接时使用实体框架生成的SQL代码不正确
我使用实体框架来执行左连接的代码,并且正在生成的sql代码有一个参数的映射问题 这个映射问题是当我在连接的一端使用IQuerable对象,而另一端是context对象时 如果我使用上下文对象而不是Iquerable,那么生成的sql代码是正确的。 例如DB实体名称:订单 属性名称:OrderId 映射到表名:订单和列订单id 如果在我的iquirable对象中,如果我将OrderId别名为order\u id,则可以解决此问题,因为我的别名和我的db列名相同,因此不存在映射问题C# 使用左联接时使用实体框架生成的SQL代码不正确,c#,entity-framework,.net-core,C#,Entity Framework,.net Core,我使用实体框架来执行左连接的代码,并且正在生成的sql代码有一个参数的映射问题 这个映射问题是当我在连接的一端使用IQuerable对象,而另一端是context对象时 如果我使用上下文对象而不是Iquerable,那么生成的sql代码是正确的。 例如DB实体名称:订单 属性名称:OrderId 映射到表名:订单和列订单id 如果在我的iquirable对象中,如果我将OrderId别名为order\u id,则可以解决此问题,因为我的别名和我的db列名相同,因此不存在映射问题 var quer
var query =(from o in context.Orders
where o.BranchKey == branchKey
Select new
{
o.OrderId,
o.BranchKey
}
);
query = query.Skip(firstRecord).Take(count).AsQueryable();
var orderDetails = (from o in query
join od in context.OrderDetails
on new {o.orderId , o.BranchKey } equals new { od.OrderId, od.BranchKey } into ordergroup
from grp in ordergroup.DefaultIfEmpty()
select new
{
o.order_id,
o.BranchKey
}
)
**Expected Result**
exec sp_executesql N'SELECT [t].[OrderId], [t].[BranchKey]
FROM (SELECT [o].[order_id] AS [OrderId], [o].[BranchKey]
FROM [dbo].[Orders] AS [o]
WHERE ((([o].[BranchKey] = @__branchKey_0)
OFFSET @__p_4 ROWS FETCH NEXT @__p_5 ROWS ONLY
) AS [t]
LEFT JOIN [dbo].[order_details] AS **[od] ON ([t].[orderId] = [od].[order_id])** AND ([t].[BranchKey] = [od].[BranchKey])
**Actual Result**
exec sp_executesql N'SELECT [t].[OrderId], [t].[BranchKey]
FROM (
SELECT [o].[order_id] AS [OrderId], [o].[BranchKey]
FROM [dbo].[Orders] AS [o]
WHERE ((([o].[BranchKey] = @__branchKey_0)
OFFSET @__p_4 ROWS FETCH NEXT @__p_5 ROWS ONLY
) AS [t]
LEFT JOIN [dbo].[order_details] AS **[od] ON ([t].[order_id] = [od].[order_id])** AND ([t].[BranchKey] = [od].[BranchKey])
如果在我的iquirable对象中,如果我将OrderId别名为order\u id,则可以解决此问题,因为我的别名和我的db列名相同,因此不存在映射问题
var query =(from o in context.Orders
where o.BranchKey == branchKey
Select new
{
o.OrderId,
o.BranchKey
}
);
query = query.Skip(firstRecord).Take(count).AsQueryable();
var orderDetails = (from o in query
join od in context.OrderDetails
on new {o.orderId , o.BranchKey } equals new { od.OrderId, od.BranchKey } into ordergroup
from grp in ordergroup.DefaultIfEmpty()
select new
{
o.order_id,
o.BranchKey
}
)
**Expected Result**
exec sp_executesql N'SELECT [t].[OrderId], [t].[BranchKey]
FROM (SELECT [o].[order_id] AS [OrderId], [o].[BranchKey]
FROM [dbo].[Orders] AS [o]
WHERE ((([o].[BranchKey] = @__branchKey_0)
OFFSET @__p_4 ROWS FETCH NEXT @__p_5 ROWS ONLY
) AS [t]
LEFT JOIN [dbo].[order_details] AS **[od] ON ([t].[orderId] = [od].[order_id])** AND ([t].[BranchKey] = [od].[BranchKey])
**Actual Result**
exec sp_executesql N'SELECT [t].[OrderId], [t].[BranchKey]
FROM (
SELECT [o].[order_id] AS [OrderId], [o].[BranchKey]
FROM [dbo].[Orders] AS [o]
WHERE ((([o].[BranchKey] = @__branchKey_0)
OFFSET @__p_4 ROWS FETCH NEXT @__p_5 ROWS ONLY
) AS [t]
LEFT JOIN [dbo].[order_details] AS **[od] ON ([t].[order_id] = [od].[order_id])** AND ([t].[BranchKey] = [od].[BranchKey])
这是您能够收集到的问题的最简单、最完整、最可验证的示例?使用缩进可以产生很大的不同。在这个网站上,其他人需要阅读你的代码——友好一点,缩进一种让你的代码更容易阅读的方式。它也适用于您——例如,您可以看到上面的缩进如何清楚地表明您的代码示例中有一个额外的
}
?这是从哪里来的?请将预期的SQL格式化并输出为代码。好的,您对问题进行了更改,现在我的格式设置不起作用