如何在linq queryable的表达式树中调用sql标量函数?

2023-12-28

我正在为 Iqueryable 创建 lambda 表达式以从集合中获取值,但我想将该值转换为其他数据类型,例如 int 或decimal。因此,由于我无法将 C# 转换与 Iqueryable 一起使用,因此我在 sql 中创建了用户定义的标量函数,并尝试在表达式中访问该函数,但它抛出异常,即“方法名称”无法转换为 sql 表达式。

public class Context
{

[DbFunction("dbo", "ConvertToDouble")]
        public int? ConvertToDouble(string value)
        {
            var sql = $"set @result = dbo.[ConvertToDouble]('{value}')";
            var output = new SqlParameter { ParameterName = @"result", DbType = DbType.Int32, Size = 16, Direction = ParameterDirection.Output };
            var result = Database.ExecuteSqlCommand(sql, output);
            return output.Value as int?;
        }
}


private static Expression<Func<TSource, TDataType>> CreateLamdaExpression<TSource, TDataType>(string fieldName)
        {
            var parameterExpression = Expression.Parameter(typeof(TSource));

            var collectionParameter = Expression.Property(parameterExpression, "CustomFieldValues");
            var childType = collectionParameter.Type.GetGenericArguments()[0];
            var propertyParameter = Expression.Parameter(childType, childType.Name);

            var left = Expression.Property(propertyParameter, "Name");
            var right = Expression.Constant(fieldName);

            var innerLambda = Expression.Equal(left, right);

            var innerFunction = Expression.Lambda(innerLambda, propertyParameter);

            var method = typeof(Enumerable).GetMethods().Where(m => m.Name == "FirstOrDefault" && m.GetParameters().Length == 2).FirstOrDefault().MakeGenericMethod(typeof(CustomFieldValue));

            var outerLambda = Expression.Call(method, Expression.Property(parameterExpression, collectionParameter.Member as System.Reflection.PropertyInfo), innerFunction);
            var propertyGetter = Expression.Property(outerLambda, "Value");

            if (typeof(TDataType) != typeof(object))
            {
               /var changeTypeCall = Expression.Call(Expression.Constant(Context), Context.GetType().GetMethod("ConvertToDouble", BindingFlags.Public | BindingFlags.Instance),
                                                            propertyGetter
                                                               );

                Expression convert = Expression.Convert(changeTypeCall,
                                                        typeof(TDataType));

                return Expression.Lambda<Func<TSource, TDataType>>(convert, new ParameterExpression[] { parameterExpression });
            }

            var result = Expression.Lambda<Func<TSource, TDataType>>(propertyGetter, new ParameterExpression[] { parameterExpression });
            return result;
        }

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在linq queryable的表达式树中调用sql标量函数? 的相关文章

  • Linq - 从表达式 创建表达式

    我有一个谓词Expression
  • 如何在特定时间以毫秒精度触发 C# 函数?

    我有两台计算机 它们的时间通过 NTP 同步 确保时间仅相差几毫秒 其中一台计算机将通过 TCP 向另一台计算机发送一条消息 以在两台计算机上的未来指定时间启动某个 c 函数 我的问题是 如何在特定时间以毫秒精度 或更好 触发 C 中的函数
  • ASP.NET Web 应用程序中的身份验证遇到问题

    我正在尝试对从登录页面登录我的 Web 应用程序的用户进行身份验证 我正在使用本教程 http support microsoft com kb 301240作为指南 它几乎准确地解释了我希望做什么 但是当我输入用户名和密码时 验证不起作用
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 如何检测应用程序正在运行的 .NET 版本?

    我尝试使用Environment Version ToString 确定目标计算机上正在使用什么 NET 框架 但安装了 4 0 版本时 它说我正在使用 NET 2 0 如何检测目标计算机上正在运行的 NET Framework 版本 En
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new

随机推荐

  • #include C/C++ 中的头文件

    在阅读了几个有关编译 特别是 C 问题的问题并注意到在许多情况下问题是缺少标头 include 后 我不禁对自己的无知感到疑惑 并问自己 现在也问你 为什么缺少的标头不会自动检查并添加或请求给程序员 例如 此类功能可用于 Netbeans
  • 如何将文字放在图像的中间

    你好 使用 CSS 我试图将一些文本放在图像的中心 所以它看起来像这样 div P I This is some text C div 我怎样才能达到这个结果 不知道这是否有帮助 图像是 32x32 像素 img vertical alig
  • Doctrine2 中 JOIN ON 和 JOIN WITH 有什么区别?

    Doctrine2 中 JOIN ON 和 JOIN WITH 有什么区别 我在手册中找不到任何相关信息 ON替换原来的连接条件 WITH为其添加一个条件 Example Album OneToMany gt Track Case One
  • 子图日期时间 X 轴刻度未按预期工作

    我正在尝试绘制许多图 以下是数据组织方式的示例 我的目的是使用谷歌分析数据构建一系列几小时或几天 比如一周 7 天 或一天 24 小时 的子图 我的索引是日期时间对象 这是当轴正确完成时单个图的外观示例 from datetime impo
  • 了解 Traceview

    我想了解跟踪视图是如何工作的 我尝试使用traceview 分析一种方法 但有一个疑问 我已附上 trace 的快照 它表示大部分时间由蓝色标记的 顶级 占用 但没有更多信息 这个方法何时执行或者执行什么功能 谁能向我解释一下为什么它花费这
  • 在scala中调用akka actor的方法

    我有一个演员定义如下 class nodeActor ID String extends Actor 其中包含一个方法 用于在启动之前设置 actor def addRef actor ActorRef 我这样实例化这个演员 val nod
  • Junit ant 任务 - 未找到 JUnitTask

    我正在尝试从我的 ant build xml 文件运行 Junit 测试 我读here http ant apache org manual Tasks junit html您可以使用 junit jar 文件 而不是使用位于 ant ho
  • 如何消除 Flutter 中两个容器之间的空间?

    我在 Column 小部件内有两个高度 250 的容器 这两个容器小部件之间没有任何其他小部件 但我仍然可以看到两个容器之间的空间很小 这是我的代码 import package flutter material dart void mai
  • 什么是spark.driver.maxResultSize?

    The ref http spark apache org docs latest configuration html says 每个分区的所有分区的序列化结果总大小的限制 激发行动 例如收集 应至少为 1M 或 0 无限 如果总大小超过
  • 如何以编程方式将 Excel 数据导入到 Access 表中?

    我已经阅读了一些相关主题 但仍然留下了这个问题 我想在 Access 数据库应用程序中编写一个函数 以编程方式导入从前两行 标题和单位分隔符 之前开始的 Excel 数据 我希望完成以下任务 能够动态选择我要导入的 Excel 文件 可能使
  • 选择nodeValue但排除子元素

    假设我有这个代码 p Hello this is a description a href Click here for more a p 如何选择的nodeValuep但排除a它的内容是什么 我当前的代码 result xpath gt
  • 步骤中未找到此类 DSL 方法“管道”

    我在 Jenkins 中的声明性管道脚本中不断收到此错误 No such DSL method pipeline found among steps 我的脚本是这样的 pipeline agent any stages stage Exam
  • 谷歌存储桶文件链接可公开访问,即使不公开?

    我正在玩谷歌桶 该存储桶不是公共的 这些文件也不公开 我上传 csv 文件后 我点击它 它在谷歌浏览器的浏览器中显示了带有一个很长的复杂 url 链接的文件 现在 如果我使用该链接并在另一个没有登录谷歌帐户的浏览器 例如 IE 中打开 我就
  • C# - 应用程序显示函数之间的所有依赖关系?

    是否有某种应用程序可以分析源代码并以图形方式显示函数之间的所有连接 我需要它来处理我正在处理的遗留代码 它很大 功能齐全 而且写得很糟糕 NDepend http www ndepend com 正是这样做以及更多其他事情 代码指标
  • 汇编程序文件 (*.asm) 的 gedit 语法突出显示

    默认情况下 gedit 不进行语法高亮显示 asm files 如何添加对此语言的支持 以下步骤应该足够了 wget http www carminebenedetto net downloads asm intel lang sudo c
  • 无法使用 PowerMock 模拟 java.lang.System#exit(int) 方法

    我的应用程序有一个流程 最后是方法System exit int 正在被呼叫 我正在尝试通过使用 TestNG 运行测试来测试此流程 然而 在运行测试时 尽管测试已完成 但我收到了这条奇怪的消息 只是为了找到根本原因 我删除了System
  • 在 AngularJS 中使用 $controller 时如何消除缩小错误

    angular module mainApp controller dynamicRouteController scope controller routeParams function scope controller routePar
  • 如何在mathematica中重载Times和Plus进行矩阵乘法

    我想要超载Times and Plus例如 对于mathematica中的矩阵乘法 让Times be BitAnd 并且加上是BitOr 然后进行矩阵乘法 无论如何 有没有一种简单的方法可以做到这一点 而无需重写我自己的矩阵乘法 Than
  • Flask 多重处理

    我正在尝试开发一个小型应用程序 它基本上会根据用户提供或请求的数据集绘制一些图表 process order 函数应该并发运行不同的数据集 由于某种原因 我只得到第一张图 而不是第二张和连续的图表 我与不同的用户打开了不同的浏览器会话 得到
  • 如何在linq queryable的表达式树中调用sql标量函数?

    我正在为 Iqueryable 创建 lambda 表达式以从集合中获取值 但我想将该值转换为其他数据类型 例如 int 或decimal 因此 由于我无法将 C 转换与 Iqueryable 一起使用 因此我在 sql 中创建了用户定义的