【问题标题】:Conversion methods do not work in LINQ?转换方法在 LINQ 中不起作用?
【发布时间】:2013-09-01 19:16:19
【问题描述】:

根据此页面http://msdn.microsoft.com/en-us/library/bb399342.aspx,转换方法应该可以工作,但是它们不起作用。

我有这个代码:

var funcionario = (from f in _db.Funcionario
                   where f.FunId == Convert.ToDecimal(funId)
                   select f).FirstOrDefault();

但是发生了关于 ToDecimal 转换的运行时错误。

"LINQ to Entities no reconoce el método 'System.Decimal ToDecimal(System.String)' del método, y este método no se puede traducir en una expresión de almacén。”

任何帮助将不胜感激。我在 .NET 4.5 中。

编辑:对于那些需要翻译错误信息的人: "LINQ to Entities 无法识别方法的方法'System.Decimal ToDecimal(System.String)',并且该方法无法翻译成仓库表达式"

【问题讨论】:

  • Linq2SQL 还是实体框架?
  • 将错误翻译成英文可能会有用
  • 使用谷歌翻译进行翻译:LINQ to Entities does not recognize the method 'System.Decimal ToDecimal (System.String)' method, and this method can not be translated into a store expression.
  • funId 是什么值?
  • @HamletHakobyan 我正在使用 EntityFramework,但是那个表达式是 Linq2Sql,不是吗?

标签: c# entity-framework


【解决方案1】:

您可以在调用 LINQ 查询之前轻松Convert 值。

decimal funIdDec = Convert.ToDecimal(funId);
var funcionario = (from f in _db.Funcionario
                   where f.FunId == funIdDec
                   select f).FirstOrDefault();

但是,如果您需要在查询中转换值,则可以使用 SqlFunctionsEntityFunctions 类。它们包含一组具有相应 SQL 函数的方法,可用于执行此类操作。

【讨论】:

  • 谢谢.. 我已经这样做了,但这是最简单的情况。我还有其他情况需要比较一天中的时间。我已经预先将常量格式化为 HHMM 格式,但是在 LINQ2SQL 表达式中,我有一个 DateTime 列,我需要将其转换为 HHMM 格式以便进行比较,但我还没有找到一个函数来做到这一点。跨度>
【解决方案2】:

事先转换funId。 EF 在运行时将其中的 linq 表达式转换为 SQL 等价物。并非所有功能都受支持。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 2018-07-04
    • 2021-11-17
    • 1970-01-01
    • 2012-02-05
    • 2019-08-03
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多