微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF6动态Linq将字符串强制转换为十进制

如何解决EF6动态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(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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。