entity-framework - Entity Framework 5 : How to Outer Join Table Valued Function

标签 entity-framework entity-framework-5

我试图在我的 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/

相关文章:

c# - 自定义连接字符串 EF5,数据库优先

entity-framework - 如何将表列映射到两个实体属性?

entity-framework - Entity Framework 代码优先 - 复合主键上的导航属性

entity-framework - 使用 EF5 和表值函数 (TVF) 执行联接?

c# - 将 EF 代理对象转换为原始 POCO 对象的最佳方法是什么?

c# - Entity Framework 添加到我决定外键 ID 的数据库

.net - 将 F# 用于 BLL 实现是否有意义?

c# - ASP.NET Core MVC 应用程序请求永远不会完成

c# - 在可空和非可空 int 上调用 'join' 时类型推断失败

.net - Entity Framework 类可以有非 Entity Framework 成员吗?