LINQ to Entities将存储过程转换为L2E查询

时间:2011-03-10 19:08:23

标签: entity-framework linq-to-entities user-defined-functions

我有以下存储过程,我试图转换为LINQ to Entities查询:

SELECT
    SR.*,
    F.*
FROM
    Users AS U,
    UsersToClients AS UM,
    Filings AS F,
    Records AS SR
    LEFT OUTER JOIN RecordsMappings AS MAP ON
        MAP.[MappingID] = SR.[MappingID]
WHERE
    UM.[ClientID] = @clientID AND
    U.[Username] LIKE UM.[Username] AND
    U.[Deleted] = 0 AND
    F.[Username] LIKE U.[Username] AND
    SR.[FilingID] = F.[FilingID] AND
    SR.[RecordType] = @recordType AND
    SR.[ClientID] = @clientID AND
    dbo.uf_Record_IsValuable(SR.[RecordID], 0) = 1

我有以下查询,这几乎就是存储过程中发生的事情:

var records =
    from sr in context.SecuritiesRecords
    from u in context.Users
    from um in context.UsersToClients
    from f in context.Filings
    where
        um.ClientID == clientID &&
        String.Compare(u.Username, um.Username, true) == 0 &&
        !u.Deleted &&
        String.Compare(u.Username, f.Username, true) == 0 &&
        sr.FilingID == f.FilingID &&
        sr.RecordType == recordType &&
        sr.ClientID == um.ClientID
    select sr;

问题出现在存储过程的最后一个WHERE子句中,该子句是对用户定义函数的调用,该函数根据一堆条件逻辑过滤掉记录。我不想从L2E调用存储过程,因为我将添加更多where子句来过滤数据,并且存储过程可以提取大量记录,然后我将在LINQ端的内存中缩小。< / p>

我有什么选择?

修改

我已成功创建了一个模型定义函数,其中包含以下内容:

<DefiningExpression>
    1
</DefiningExpression>

但是当我尝试将我的UDF插入到定义表达式(我还将它添加到模型中)时,如下所示:

<DefiningExpression>
    uf_Record_IsValuable(100, 0)
</DefiningExpression>

我收到以下错误:'uf_Record_IsValuable'无法解析为有效的类型或函数。

1 个答案:

答案 0 :(得分:0)