linq - F# Power Pack Linq 问题

标签 linq f# powerpack

我有一个简单的函数,它利用 F# power pack 将引用转换为 linq 表达式。其功能是:

let toLinq (exp : Expr<'a -> 'b>) =
    let linq = exp.ToLinqExpression()
    let call = linq :?> MethodCallExpression
    let lambda = call.Arguments.[0] :?> LambdaExpression
    Expression.Lambda<Func<'a, 'b>>(lambda.Body, lambda.Parameters)

我使用此函数创建由使用 linq to sql 查询数据库的 C# 库使用的表达式。例如,我可能会构建一个如下表达式:

    let test = toLinq (<@fun u -> u.FirstName = "Bob"@> : Expr<Account->bool>)

并将其传递给如下方法:

public IEnumerable<T> Find(Expression<Func<T, bool> predicate)
{
        var result = Table.OfType<T>();         
        result = result.Where(predicate)                                    
        var resultArray = result.ToArray();            
        return resultArray;
}

这按照电源组 1.9.9.9 版本中的设计工作。然而,它不再适用于最新版本的电源组。我收到的错误是方法“Boolean GenericEqualityIntrinsic[String](System.String, System.String)”不支持对 SQL 的转换。

我查看了 power pack 的更改,似乎使用新版本构建的 linq 表达式使用 GenericEqualityIntrinsic 来将属性值与常量进行比较,而在版本 1.9.9.9 中它使用String.op_Equality 进行比较。

这是对这个问题的正确理解吗?如何利用新版本的 Power Pack 将引用转换为可由使用 linq to sql 的 C# 库使用的 linq 表达式?

最佳答案

是否显式调用

System.String.op_Equality(s1,s2)

工作?

关于linq - F# Power Pack Linq 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6434762/

相关文章:

c# - 使用 C# 更改 Visual Basic Power Pack 3 中 RectangleShape 的背景颜色?

linq - 有谁知道有人在 LINQ-to-Memcached 提供程序上工作?

正则表达式正在抓取前面的字符

C#/F#性能比较

visual-studio-2015 - 如何设置条件断点,而在Visual Studio调试F#

F# Powerpack 的元数据无法将 FSharp.Core 识别为 F# 库

f# - Microsoft.FSharp.Text.ArgParser 在哪里?

c# - 排除另一个 LINQ 查询中一个查询的 LINQ 结果

c# - 林克 "Object reference not set to an instance of an object."

c# - 对从 Linq2Sql 的 var 中获取 int 感到困惑