【发布时间】:2018-05-21 02:00:57
【问题描述】:
嗯,这听起来比它更容易!我有一个表,其中包含存储为字符串值的金额。但是我的代码需要它们作为十进制值,并且需要将它们转换为十进制,作为 IQueryable 正在进行的查询的一部分!因此,无法使用 .ToList() 。转换需要由其背后的数据库完成。
此 IQueryable 基本上是 IQueryables 链的一部分,因此下一个查询可能希望在此数量上添加过滤器以进行较小的选择,或者对数量进行其他类型的数学运算。进入的查询可能已经是所有数据的子选择。
编辑:让我解释一下我在这里的工作:我有类似这种方法的东西要写:
public static IQueryable<PriceList> GetPriceList(this IQueryable<PriceData> query) => query.Select(d => new PriceList{Name = d.Item.Name, Price = decimal.Parse(d.Value)}).AsQueryable();
PriceData 是一个包含一些字段和价格作为字符串值的记录。但是价格表记录需要它们为十进制。
然后,此方法可以被另一种扩展方法用于进一步的选择、数学等。只是 decimal.parse 和其他选项在 IQueryable 中不起作用...
【问题讨论】:
-
dbContext.someTable.SqlQuery("SELECT CONVERT(amount, DECIMAL) FROM someTable").AsIQueryable()怎么样? -
要是我能做到就好了。但不是。我得到一个 IQueryable 作为输入,并且必须踢出一个 IQueryable 作为输出,因为它是更大的表达式树的一部分......
-
为什么价格首先是一个字符串?这似乎是错误的。 (可能应该是金钱,十进制)。也就是说,可能是stackoverflow.com/questions/12118258/…的副本
-
是的,我知道。这是错误的,我无法控制它。它只是表达式链的一部分。
-
至于重复?不,因为另一个问题已经超过 5 年了,因为那里的答案建议使用 .ToList()。我不能使用它,因为这意味着 IQueryable 失去了与数据库的链接,并将实际执行查询。在我的情况下这是不允许的!
标签: c# entity-framework-6 iqueryable