0

我一直在 EF 中进行查询,一切正常,但现在我在 db 2 字段中实际上是 CHAR .. 它们保存一个日期,但以数字的形式,在 SQL Management Studio 中我可以执行 date1 >= date2 for例如,我还可以检查我的数字是否在这两个日期之间。

它没有什么不寻常的,但基本上是一个代表日期的字段(数字随着日期的增长而增长)......

现在在 EF 中,当我尝试执行 >= 时,它指出您不能在字符串上执行此操作,可以理解它的 c#,所以我尝试执行 Convert.ToDecimal(date1) 但它给了我一个错误,说它不支持。

我没有更改数据库字段的选项,它们是一成不变的:-(

我让它工作的方式是请求详细信息并执行 .ToList 然后使用 .ToDecimal 并且它可以工作,但当然这是在内存中执行的!这破坏了 EF 的对象,例如使用 iqueryable 添加到查询中。

我让它工作的另一种方法是将 SQL 查询传递给 dbcontext 的 SqlQuery,但我又失去了很多 ef 功能。

任何人都可以帮忙吗?

我真的被困住了

4

2 回答 2

2

正如您所说的那样,您尝试过>=我认为如果您可以用纯 SQL 做到这一点,它将对您有用。这可以通过做

String.Compare(date1, date2) >= 0

EF 足够聪明,可以将其转化为>=运算符。

优点是您不需要比较转换后的值,因此可以在执行计划中使用索引。

于 2012-06-01T06:38:56.923 回答
0

首先,您至少可以通过使用AsEnumerable()而不是启用查询的延迟执行ToList()。但是,这不会改变当您实际上执行查询时数据库需要返回所有记录的事实。

要让数据库执行过滤,您的查询需要与 SQL 兼容。由于您无法在 SQL 中执行 ToDecimal(),因此您需要通过将您的字符串转换为与 andmyvar格式相同的字符串来直接处理字符串,然后形成您的查询。dateStartdateEnd

于 2012-06-01T06:50:27.037 回答