【问题标题】:How can I make a LINQ query with subqueries in the from statement?如何在 from 语句中使用子查询进行 LINQ 查询?
【发布时间】:2009-07-01 16:32:30
【问题描述】:

我可以在 LINQ to SQL 上进行这种类型的 SQL 查询吗?

(这个查询只是一个例子)

select *
from orders as o
left outer join (select * from ordersdetail where status = 'A') as od
on o.id = od.orderid

我需要的是如何在 de "from" 语句中放置子查询。

谢谢

【问题讨论】:

    标签: sql linq linq-to-sql


    【解决方案1】:

    只要按照通常的方式做订单详情条件:

    from o in orders
    join od from orderdetails on o.id = od.orderid
      into details
    where details.status == 'A'
    select new { Order = o, Details = details}
    

    (注意,Details 是一个序列,对于每个匹配的详细信息记录,可以使用 First 和 FirstOrDefault 等 LINQ 运算符仅提取一个。)

    或者使用表达式作为数据源

    from o in orders
    join od from orderdetails.Where(d => d.Status == 'A') on o.id = od.orderid
      into details
    select new { Order = o, Details = details}
    

    甚至,使用另一个理解表达式作为源表达式:

    from o in orders
    join od from (from d in orderdetails
                  where d.Status == 'A'
                  select d)
      on o.id = od.orderid
      into details
    select new { Order = o, Details = details}
    

    (设置DataContextLog 属性可让您查看SQL,以便比较实际生成的SQL。)

    编辑:更改为使用 Group Join (... into var) 来获取外部联接(而不是内部联接)。

    【讨论】:

      【解决方案2】:

      你可以用 Where 函数试试这个:

      from o in orders
      join od in ordersdetail.Where(x => x.status == 'A') on o.id = od.orderid
      select new { Order = o, Details = od}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-25
        • 1970-01-01
        相关资源
        最近更新 更多