我有一个IQueryable<SomeObject> query
,它包含一个属性Value,它是一个double
。
我想过滤它的字符串,有点千分隔符逗号小数(欧洲)。
我尝试了以下操作:query.Where(q => q.Value.ToString("#,##0.00").StartsWith(someValue)
问题是无法翻译:Translation of method 'double.ToString' failed. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
对于我的情况下,它是不可能转换为客户端评估,因为仍然需要应用形式的其他几个过滤器,我的查询。有没有办法解决这个问题?
4条答案
按热度按时间mxg2im7a1#
我认为
ToString()
不接受你的字符串格式。对double进行字符串化并不是最好的方法,尤其是当它是一个可以完美使用逻辑的数字时。
改变你的:
字符串
到
型
然后,你想取“以”开头的值,所以对于值(对于
2.11
),它可以是:型
qlfbtfca2#
看起来你试图在LINQ to Entities查询中将double格式化为字符串,这导致了转换问题。你使用的
ToString
方法无法转换为SQL,这就是为什么它建议客户端评估。你可以尝试使用
SqlFunctions.StringConvert
方法,而不是在查询中使用ToString
。下面是一个例子:字符串
这应该有助于将double转换为可以转换为SQL的字符串。添加
Trim
是为了删除转换过程中可能引入的尾随空格。djmepvbi3#
也许这就是你想要的。我只是在“Where”之前添加了“AsQueryable()”:
字符串
tct7dpnv4#
Entity Framework无法将具有自定义格式的
ToString
方法转换为SQL查询。若要解决此问题,可以考虑在应用筛选器之前格式化值。例如:字符串
在此代码中,
formattedSomeValue
是通过将欧式千位分隔符(点)替换为空字符串并将欧式小数点分隔符(逗号)替换为点来创建的。这样,您就可以以Entity Framework可以翻译的方式执行过滤。确保用过滤后的结果替换查询变量,因为像
Where
这样的LINQ方法会返回一个新的IQueryable
对象。希望有帮助!