【问题标题】:Unable to cast the type 'System.Int32' to type'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types无法将类型“System.Int32”转换为类型“System.Object”。 LINQ to Entities 仅支持转换 EDM 基元或枚举类型
【发布时间】:2016-07-31 13:21:34
【问题描述】:

您好,我相信这个问题在 StackOverFlow 上已经出现了 100 次,但我没有设法解决我的问题。这是给我带来麻烦的代码行

 DatumSnimanja = (x.VrijemeSnimanja != null) ? ((DateTime)x.VrijemeSnimanja).Day + "." + ((DateTime)x.VrijemeSnimanja).Month + "." + ((DateTime)x.VrijemeSnimanja).Year : null,

请问如何解决这个问题。

完整代码

     var result = resultVideoKlipBaseInfo.Select(x => new
            {
                x.IDvideoKlip,
                x.LokacijaHDD,
                x.NazivVideoKlipa,
                x.Snimatelj.IDsnimatelj,
                x.Snimatelj.Ime,
                x.Snimatelj.Prezime,
                x.Snimatelj.Storno,
                DatumSnimanja = (x.VrijemeSnimanja != null) ? ((DateTime)x.VrijemeSnimanja).Day + "." + ((DateTime)x.VrijemeSnimanja).Month + "." + ((DateTime)x.VrijemeSnimanja).Year : null,
                SatIMinutaSnimanja = (x.VrijemeSnimanja != null) ? ((DateTime)x.VrijemeSnimanja).Hour + ":" + ((DateTime)x.VrijemeSnimanja).Minute : null,
                x.VrijemeSnimanja,                          
                x.VrijemeTrajanjaKlipa

            });
            return Ok(result);

使用此代码,我从数据库中获取 DateTime,并将其从 DateTime 格式转换为字符串格式。

我想从这个 2016-12-31 00:00:00.000 获得类似 31.12.2016 的东西

感谢大家阅读这个问题:)

【问题讨论】:

  • x的数据类型是什么?
  • 您不能将整数与字符串“.”结合起来。使用 ToString() 将整数转换为字符串。 dong 的正确方法是获取 DateTime 并使用 ToString("dd.MM.yyyy") 输出。
  • 你为什么要投射到 (DateTime) ?请展示你的模型。并显示您的完整查询。
  • 我只是添加完整代码
  • 这可能是一个答案:stackoverflow.com/questions/5839388/…

标签: c# asp.net entity-framework linq casting


【解决方案1】:

您不能使用 ToString() 在针对数据库的查询中进行格式化,因为没有等效的 SQL 方法,它会给您一个错误。 (这里是支持的字符串方法列表,顺便说一句:https://msdn.microsoft.com/en-us/library/bb738534(v=vs.100).aspx)。

最简单的方法是返回原始值,然后在调用主查询后进行格式化(通过对其调用 ToList() 或遍历结果)。

这里有几种方法:

How can I convert DateTime to String in Linq Query?

Convert datetime to a formatted string inside a LINQ to SQL query

【讨论】:

    【解决方案2】:

    我通过更改代码行来解决这个问题

    DatumSnimanja = (x.VrijemeSnimanja != null) ? ((DateTime)x.VrijemeSnimanja).Day + "." + ((DateTime)x.VrijemeSnimanja).Month + "." + ((DateTime)x.VrijemeSnimanja).Year : null,
    

    到这里

        DatumSnimanja = SqlFunctions.DateName("day", x.VrijemeSnimanja) + "." + SqlFunctions.DateName("month", x.VrijemeSnimanja) + "." +  SqlFunctions.DateName("year", x.VrijemeSnimanja),
    

    谢谢大家的帮助! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2013-09-29
      • 2013-03-13
      • 2011-06-22
      相关资源
      最近更新 更多