我试图在我的 LINQ 查询中使用内联表值函数外部连接表,但在运行时出现查询编译错误:
“查询试图通过嵌套查询调用 'OuterApply',但 'OuterApply' 没有合适的键。”
我的 linq 语句如下所示:
var testQuery = (from accountBase in ViewContext.AccountBases
join advisorConcatRaw in ViewContext.UFN_AccountAdvisorsConcatenated_Get()
on accountBase.AccountId equals advisorConcatRaw.AccountId into advisorConcatOuter
from advisorConcat in advisorConcatOuter.DefaultIfEmpty()
select new
{
accountBase.AccountId,
advisorConcat.Advisors
}).ToList();
函数定义如下:
CREATE FUNCTION dbo.UFN_AccountAdvisorsConcatenated_Get()
RETURNS TABLE
AS
RETURN
SELECT AP.AccountId,
LEFT(AP.Advisors, LEN(AP.Advisors) - 1) AS Advisors
FROM ( SELECT DISTINCT
AP.AccountId,
( SELECT AP2.PropertyValue + ', '
FROM dbo.AccountProperty AP2 WITH (NOLOCK)
WHERE AP2.AccountId = AP.AccountId
AND AP2.AccountPropertyTypeId = 1 -- Advisor
FOR XML PATH('')) AS Advisors
FROM dbo.AccountProperty AP WITH (NOLOCK)) AP;
我可以直接在sql中成功执行join如下:
SELECT ab.accountid,
advisorConcat.Advisors
FROM accountbase ab
LEFT OUTER JOIN dbo.Ufn_accountadvisorsconcatenated_get() advisorConcat
ON ab.accountid = advisorConcat.accountid
有没有人有左外部将内联 TVF 连接到 LINQ to entity 中的表的工作示例 - 或者这是已知缺陷等?非常感谢。
最佳答案
Entity Framework 需要知道 TVF 结果的主键列是什么才能进行左连接。基本上,您需要创建一个与 TVF 结果具有相同架构的假表,并在模型浏览器中更新 TVF 以返回新创建的表类型而不是默认复杂类型。您可以引用this answer以获取更多详细信息。
关于entity-framework - Entity Framework 5 : How to Outer Join Table Valued Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979213/