如何在linq中加入到sql?

时间:2009-08-25 04:45:12

标签: .net linq linq-to-sql

你好如何在linq中加入sql?

我看到他们有关键词join和group join但是他们有什么样的联接?

左,右,十字,内在?

一旦完成,我该如何选择某些列?

选择Column1,Column2
从表A;

查询或方法语法都可以。我仍然无法决定我更喜欢什么,每个人似乎都有自己的优势。

3 个答案:

答案 0 :(得分:4)

作为第一步,我肯定会推荐阅读Scott Guthrie的优秀Using Linq-to-SQL多部分教程。它涵盖了许多Linq-to-SQL基础知识。

同时查看Hooked on LINQ 5 minute overview - 正如它在那里提到的那样,经常在Linq-to-SQL中,你甚至不需要自己表达JOIN - LINQ-to-SQL为你处理了很多这些直接通过公开实体引用和实体集引用。

如果你得出结论你真的必须使用明确的JOIN,Bilal Haidar很好地展示了如何在他的博客文章中做explicit LEFT OUTER JOIN

INNER JOIN的“正常”情况相对简单 - 您只需添加

from c in customers
  join o in orders on o.customerid equals c.customerid

查询。

至于选择个别领域 - 请参阅Scott Guthrie的介绍系列文章 - 他详细解释了这一点!

基本上,你可以做以下三件事之一:

  • 选择整个实体(如客户)并获取所有信息
  • 将一些字段选择为新的现有类型(例如“CustomerOrder”类型)
  • 选择一些新的匿名类型字段

这将选择所有拥有订单的客户:

   from c in customers
      join o in orders on o.customerid equals c.customerid
      select c;

这会将所有客户和订单选择为项目中已存在的新“CustomerOrder”类型:

   from c in customers
      join o in orders on o.customerid equals c.customerid
      select new CustomerOrder { CustomerName = c.Name, 
                                 CustomerID = c.CustomerId,
                                 OrderDate = o.OrderDate, ...... } ;

这会将客户ID和订单日期选择为新的匿名类型供您使用:

   from c in customers
      join o in orders on o.customerid equals c.customerid
      select new { CustomerID = c.CustomerId, OrderDate = o.OrderDate } ;

这是一个强大的类型 - 这背后有一个完整的.NET CLR类型 - 你只是不知道它的名字:-)但你可以在代码中使用这些元素,你将获得智能感知和所有 - 优秀用于快速临时操作某些数据。

马克

答案 1 :(得分:0)

查看有关LINQ-To-SQL连接的MSDN文章: http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic12

LINQ中的连接是内连接。

LINQ中的组连接是一个具有into子句的连接。父信息被加入到子信息的组中。也就是说,子信息被合并到一个集合中,子集合的父信息只出现一次。

答案 2 :(得分:0)

LINQ中的join关键字将为您提供内部联接。您可以通过在select子句中创建新对象来“投影”结果。该对象可以是键入的或匿名的。这是一个例子:

var ordersAndProducts = from o in orders
    join p in products on o.ProductId equals p.ProductId
    select new { OrderDate = o.OrderDate, ProductName = p.Name };

此查询对ProductId属性上的订单和产品集合执行内部联接。结果集合中的每个项目都被投影到一个匿名对象中(new {.. list of properties / values ...}动态创建一个对象。

如果您使用的是LINQ to SQL(它看起来很像),您可以通过调试应用程序或在数据库上运行探查器来查看发送到数据库的SELECT语句。