LINQ to Entities 常用查询语句

本文介绍如何使用LINQ的Include()操作符预加载关联实体,以减少数据库查询次数并提高应用程序性能。通过示例展示了不同语法风格的应用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要使用关联实体返回局部或完整的对象图,需要在LINQ 标准查询操作符之前执行Include()操作符,如下列查询所示,它将返回和前面“使用Include()操作符进行预先加载”一节同样的结果:

  1. C# 3.0  
  2. using (NorthwindEntities ocNwind = new 
  3. NorthwindEntities("name=NorthwindEntities"))  
  4. {  
  5. List<Order> orderList = null;  
  6. ObjectQuery<Order> orders = ocNwind.Orders;  
  7. orders.MergeOption = MergeOptions.AppendOnly;  
  8. var orderQuery = orders.Include("Order_Details")  
  9. .Include("Customer")  
  10. .Include("Employee")  
  11. .Include("Shipper")  
  12. .Where(o => o.Customer.Country == "Brazil")  
  13. .OrderByDescending(o => o.OrderID)  
  14. .Select(o => o)  
  15. .Take(5);  
  16. foreach (Order order in orderQuery)  
  17. {  
  18. // Materialize the object  
  19. orderList.Add(order);  
  20. }  
  21. }  
  22. VB 9.0  
  23. Using ocNwind As New NorthwindEntities("name=NorthwindEntities")  
  24. Dim orderList As List(Of Order) = Nothing  
  25. Dim oqOrders As ObjectQuery(Of Order) = ocNwind.Orders  
  26. orders.MergeOption = MergeOptions.AppendOnly  
  27. Dim orderQuery = oqOrders.Include("Order_Details") _  
  28. .Include("Customer") _  
  29. .Include("Employee") _  
  30. .Include("Shipper") _  
  31. .Where(Function(o) o.Customer.Country = "Brazil") _  
  32. .OrderByDescending(Function(o) o.OrderID) _  
  33. .Select(Function(o) o) _  
  34. .Take(5)  
  35. For Each oqOrder As Order In orderQuery  
  36. ' Materialize the object  
  37. orderList.Add(oqOrder)  
  38. Next oqOrder  
  39. End Using 

LINQ 表达式语法和串联方法调用区别较大。在4 个标准查询操作符执行之后,要将ObjectQuery<Order>改变为IQueryable<Order>类型,需要把Include()操作符和LINQ 表达式相分隔,如下所示:

  1. C# 3.0  
  2. ordersorders = orders.Include("Order_Details")  
  3. .Include("Customer")  
  4. .Include("Employee")  
  5. .Include("Shipper");  
  6. orderQuery = (from o in orders  
  7. where o.Customer.Country == "Brazil"  
  8. orderby o.OrderID descending  
  9. select o).Take(5);  
  10. VB 9.0  
  11. oqOrdersoqOrders = oqOrders.Include("Order_Details")  
  12. .Include("Customer")  
  13. .Include("Employee")  
  14. .Include("Shipper")  
  15. orderQuery = (From o In oqOrders _  
  16. Where o.Customer.Country = "Brazil" _  
  17. Order By o.OrderID Descending _  
  18. Select o).Take(5) 

可选地,可以使用下面这样更为易读的语法:

  1. C# 3.0  
  2. orderQuery = (from o in orders.Include("Order_Details")  
  3. .Include("Customer")  
  4. .Include("Employee")  
  5. .Include("Shipper")  
  6. where o.Customer.Country == "Brazil"  
  7. orderby o.OrderID descending  
  8. select o).Take(5);  
  9. VB 9.0  
  10. orderQuery = (From o In oqOrders.Include("Order_Details" _  
  11. .Include("Customer") _  
  12. .Include("Employee") _  
  13. .Include("Shipper") _  
  14. Where o.Customer.Country = "Brazil" _  
  15. Order By o.OrderID Descending _  
  16. select o).Take(5); 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值