问题描述
我首先在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(Example)。将其转换为十进制而不是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();