LINQ to Entities 查询注意事项

1> 排序信息丢失

如果在排序操作之后执行了任何其他操作,则不能保证这些附加操作中会保留排序结果。这些操作包括 Select 和 Where 等。另外,采用表达式作为输入参数的 First 和 FirstOrDefault 方法不保留顺序。
如下代码:并不能达到反序排序的效果

using (var edm = new NorthwindEntities())
{
     IQueryable<Customers> cc = edm.Customers.OrderByDescending(c => c.CustomerID).Where(c => c.Region != null).Select(c => c);
     foreach (var c in cc)
          Console.WriteLine(c.CustomerID);
}

2> 不支持无符号整数

由于 实体框架不支持无符号整数,因此不支持在 LINQ to Entities 查询中指定无符号整数类型。如果指定无符号整数,则在查询表达式转换过程中会引发 NotSupportedException异常,并显示无法创建类型为“结束类型”的常量值。此上下文仅支持基元类型(“例如 Int32、String 和 Guid”)。
如下将会报异常的代码:

using (var edm = new NorthwindEntities())
 {
      uint id = UInt32.Parse("123");
      IQueryable<string> produt = from p in edm.Products
                                  where p.UnitPrice == id
                                  select p.ProductName;
      foreach (string name in produt)
            Console.WriteLine(name);
}

上面的代码中,由于id是uint而不是Int32,String,Guid的标量类型,所以在执行到where p.UnitPrice ==id这个地方时,会报异常。

3> 不支持引用非标量闭包

不支持在查询中引用非标量闭包(如实体)。在执行这类查询时,会引发 NotSupportedException 异常,并显示消息“无法创建类型为“结束类型”的常量值。此上下文中仅支持基元类型(‘如 Int32、String 和 Guid’)
如下将会报异常的代码:

using (var edm = new NorthwindEntities())
 {
        Customers customer = edm.Customers.FirstOrDefault();
        IQueryable<string> cc = from c in edm.Customers
                                where c == customer
                                select c.ContactName;
         foreach (string name in cc)
               Console.WriteLine(name);
}

上面的代码中,由于customer是引用类型而不是Int32,String,Guid的标量类型,所以在执行到where c==customer这个地方时,会报异常。

时间: 2024-08-27 05:07:35

LINQ to Entities 查询注意事项的相关文章

LINQ to Entities 查询语法

转自: http://www.cnblogs.com/asingna/archive/2013/01/28/2879595.html 实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员使用 Visual Basic 或 Visual C# 根据实体框架概念模型编写查询.针对实体框架的查询由针对对象上下文执行的命令目录树查询表示.LINQ to En

在 LINQ to Entities 查询中无法构造实体或复杂类型

在编写EF+Linq的过程中,可能会遇到"在 LINQ to Entities 查询中无法构造实体或复杂类型"的问题.解决方法:从原有类型中继承一个子类,然后创建子类实例下面是例子: private static void Main(string[] args) { Boolean s = false; using(Northwind dbo = new Northwind()) { IQueryable<Customers> query; if(s) { // 错误的写法

单个 LINQ to Entities 查询中的两个结构上不兼容的初始化过程中出现类型“XXXX”

最近在做一个报表的时候,用EF使用了Contact方法,但是程式运行一直出错.最近终于找到原因了,写下来提醒下自己.好了,进入正题: 现在我举个栗子,目前数据库中有ParentStudent表和SubStudent表,现在需要将两张表联合起来后再使用分页查询. 表ParentStudent和SubStudent的结构完全一样,我这边就只展示SubParent表的结构了: CREATE TABLE [dbo].[SubStudent]( [ID] [varchar](10) NOT NULL, [

在 LINQ to Entities 查询中无法构造实体或复杂类型“Cits.Data.LineImg”。

错误代码: adlist = _sImg.Where(o => o.AdType == 11).OrderBy(o => o.Desc).OrderByDescending(o => o.Id).Select(i => new LineImg { Url = i.Url, ImgUrl = i.ImgUrl, Title = i.Title }).ToList(); 修正代码: adlist = _sImg.Where(o => o.AdType == 11).OrderBy

LINQ(LINQ to Entities)

LINQ to Entities 是 LINQ 中最吸引人的部分.它让你可以使用标准的 C# 对象与数据库的结构和数据打交道.使用 LINQ to Entities 时,LINQ 查询在后台转换为 SQL 查询并在需要数据的时候执行,即开始枚举结果的时候执行.LINQ to Entities 还为你获取的所有数据提供变化追踪,也就是说,可以修改查询获得的对象,然后整批同时把更新提交到数据库. LINQ to Entities 是 Entity Framework 的一部分并且取代 LINQ to

LINQ to Entities不识别方法***,因此该方法无法转换为存储表达式

我的程序里有这么一段代码: order.OrderExpressInfo = (from oei in orderExpressRepository.Entities where oei.OrderId == order.OrderId select new EbcBuy.Bll.Orders.Models.OrderExpress { ContentInfo = oei.ContentInfo, CreatedTime = oei.CreatedTime, CreatedUserId = oe

LINQ中in的实现方法-LINQ To Entities如何实现查询 select * from tableA where id in (1,2,3,4)

如果用in是字符串类型无问题,可以直接这样用 var result = SNFService.Instance.ModuleService.GetList(UserInfo).Where(entity => entity.DeletionStateCode == 0 ).Where(entity => urls.Contains((entity.NavigateUrl == null ? "" : entity.NavigateUrl).ToLower())).OrderB

LINQ to Entities 不识别方法“System int string 转换的问题

这个问题困扰了挺久,网上找了挺多方法 都太好使. 分几种情况. 1.如果查询结果 转换,那比较容易. var q = from c in db.Customers where c.Country == "UK" || c.Country == "USA" select new { Phone = c.Phone, InternationalPhone = PhoneNumberConverter(c.Country, c.Phone) }; public strin

LINQ to Entities 不识别方法“System.String ToString() 的解决方法

今天在做一个页面的时候出现了LINQ to Entities 不识别方法"System.String ToString()"的错误,对于源码IQueryable<SelectListItem> items = roleInfoServer.Get(r => true).Select(r => new SelectListItem() { Value = r.Id.ToString(), Text = r.RoleName });找了好长的时间没有找到原因.无奈之