首页 > 解决方案 > EF6 Dynamic Linq 将字符串转换为十进制

问题描述

我首先在 System.Dynamic.Linq 中使用 EF6 代码。我试图弄清楚如何将字符串转换为十进制。与此处要求的基本相同:Dynamic LINQ Cast issue

我的系统解析生成名称/值对的文件。这些作为 varchar 列存储在表中。这些值可以表示任何类型(字符串、整数、十进制、日期时间等),因此我无法真正保存为实际数据类型,因此所有内容都存储为 varchar。

我在应用程序中有一个文本框,可让用户输入动态 linq 查询。例如,用户可能正在尝试这样做:

Name == "Test Value" && Value > 5.5

或者

Name == "Other Value" && Value == "My String Value"

问题是我似乎无法在 Value 列上进行必要的转换。我目前主要对转换为十进制感兴趣,因为这是大多数数据。我尝试了一些我在那里发现的建议:

  1. Convert.ToDecimal(Value):Linq to Entities 无法识别方法
  2. Decimal.Parse(Value):Linq to Entities 无法识别该方法
  3. 尝试实现 DbFunction (示例)。将其转换为十进制而不是 int。ParseDecimal(Value):不存在适用的方法。显然它正在业务对象本身上寻找该方法。

似乎是一件简单而常见的事情。我错过了什么?

标签: c#entity-framework-6dynamic-linq

解决方案


一种解决方案可能是具体化列表(因此您选择您Value作为字符串),然后再次使用 LINQ Dynamic 执行另一个选择,但这一次,它将在应用程序端,因此您将不再受 EF6 限制

var list = context.MyEntities.Select("[the dynamic select without conversion]")
                             .ToDynamicList()
                             .Select("[the dynamic select with conversion]")
                             .ToDynamicList();

推荐阅读