无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺。

先将情况记录如下,以供以后参考。

查询主要设计两张表,由外键关联:

  

在进行下面的查询时,出现异常:无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

 public ActionResult GetIpSegments()
        {
            //List<Ipsegment> ipsegments = (from s in deviceDB.Ipsegment select s).ToList();
            var ipsegments = from d in deviceDB.DeviceCategory
                             join s in deviceDB.Ipsegment
                             on d.devicecategoryid equals s.devicecategoryid
                             select new
                                        {
                                            devicecategoryid1 = s.devicecategoryid,
                                            devicecategoryname1 = d.devicecategoryname,
                                            ipsegment = "202.115.242." + s.ip_head + "-202.115.242." + s.ip_end
                                        };

            return Json(ipsegments, JsonRequestBehavior.AllowGet);
        }

后来,对查询做了修改,才成功。修改后的查询如下所示:

    public ActionResult GetIpSegments()
        {
            var ipsegments = from s in deviceDB.Ipsegment
                             select new
                             {
                                 s.devicecategoryid,
                                 s.DeviceCategory.devicecategoryname,
                                 s.ip_head,
                                 s.ip_end
                             };

            return Json(ipsegments, JsonRequestBehavior.AllowGet);
        }

这其中的原因,现在还不了解,等了解后再作补充。

时间: 2024-10-19 19:41:15

无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。的相关文章

[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection

[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection.类型 A 源自“System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”(在上下文“Default”中的“C:\WINDOWS\Mic

LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”

我就不屁话,能一张图就解决的就不说话了 2015-03-28 14:53:24,440 [10] ERROR log - System.NotSupportedException: LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”. 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.NotSupportedTranslator.Translate(ExpressionConverter

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系.

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系. The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single. https://msdn.microsoft.com/zh-cn/library/s

LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

Expression<Func<Order_info, bool>> expre = expression; var q = db.order_info; IQueryable<Order_info> query = q; if (expre != null) { query = query.Where(expre); } 修改为: 1 Expression<Func<Order_info, bool>> expre = expression;

NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateTime”强制转换为类型“System.Object”.LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型. 在 System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastType

[A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为

“/”应用程序中的服务器错误. [A]System.Web.WebPages.Razor.Configuration.HostSection 无法强制转换为 [B]System.Web.WebPages.Razor.Configuration.HostSection.类型 A 源自“System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”(在上下文“Default”中

第5章 基元类型、引用类型和值类型

5.1编程语言的基元类型 编译器(Compiler)直接支持的数据类型称为基元类型(primitive type). 我希望编译器根本不要提供基元类型名称,强制开发人员使用FCL(Framework类库)类型名称: 许多开发人员都困惑于到底应该使用string还是String.由于C#的string直接映射到System.String,所以两者是没有区别的.int始终映射到System.Int32,所以不管在什么操作系统上运行,代表的都是32位整数. 5.2引用类型和值类型 虽然FCL中大多数类

05 基元类型、引用类型和值类型

基元类型 书上一开头就说了一个概念 编译器直接支持的数据类型称为基元类型(primitive type). 以下是基元类型. C# Primitive Typ FCL Type CLS-Compliant sbyte System.SBte NO byte System.Byte YES short System.Int16 YES ushort System.UInt16 NO int System.Int32 YES uint System.UInt32 NO long System.Int

checked 和 unchecked 基元类型操作

对基元类型执行的许多算术运算都可能造成溢出: Byte b = 100; b = (Byte) (b + 200); // b 现在包含 44(或者十六进制值 2C) 重要提示:执行上述算术运算时,第一步要求所有操作数都扩大为 32 位值(或者 64 位值,如果任何操作数需要超过 32 位来表示的话).所以, b 和 200(这两个值都不超过 32 位) 首先转换成 32 位值,然后加到一起.结果是一个 32 位值(十进制 300,或十六进制 12C).该值在存回变量 b 之前,必须转型为一个