c# - 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 列上进行必要的转换。我目前主要对转换为十进制感兴趣,因为这是大多数数据。我尝试了一些我在那里发现的建议:
- Convert.ToDecimal(Value):Linq to Entities 无法识别方法
- Decimal.Parse(Value):Linq to Entities 无法识别该方法
- 尝试实现 DbFunction (示例)。将其转换为十进制而不是 int。ParseDecimal(Value):不存在适用的方法。显然它正在业务对象本身上寻找该方法。
似乎是一件简单而常见的事情。我错过了什么?
解决方案
一种解决方案可能是具体化列表(因此您选择您Value
作为字符串),然后再次使用 LINQ Dynamic 执行另一个选择,但这一次,它将在应用程序端,因此您将不再受 EF6 限制
var list = context.MyEntities.Select("[the dynamic select without conversion]")
.ToDynamicList()
.Select("[the dynamic select with conversion]")
.ToDynamicList();
推荐阅读
- docker - What's the performance difference of puppeteer.launch() versus puppeteer.connect()?
- python - 检查 Python3.7 中的输入是否为整数会出错
- java - 无法创建新服务:通过 SSH 启动 GRID 时的 ChromeDriverService,但直接在主机上创建 GRID 时工作正常
- mysql - mysql-触发更新列
- javascript - eslint 规则强制在块的顶部声明变量?
- google-bigquery - 尝试将 Google Big Query 中的输出字段转换为日期
- django - 如何在 Django 模型中获取 upload_to 的当前日期
- bash - 如何在我的 .inputrc 中为 readline 使用 option-delete
- c++ - 如何将 std::array 实例地址作为参数传递给 std::min_element?
- python - 构建字典,其值为单词的平均长度