引用linq子查询

时间:2016-03-30 10:27:32

标签: c# entity-framework linq

我无法以正确的方式编写以下查询。 对于查询中的每个项目,我想加入第一个有效配置。

 var query = someLinqQuery;

 var res = (from item in query
                 join sub in 
                 (
                        from confs in db.ConfigurationsTable
                        where confs.t_date_start_val <= item.date && confs.t_date_end_val >= item.date
                        select new{ .. }
                        // First
                 ) on item.t_id equals sub.t_id into
            select c);

在子查询中不可见。 另外我如何只从子查询中获取第一项?

1 个答案:

答案 0 :(得分:0)

你的帖子中有一些误解。

  

在子查询

中不可见

这是因为子查询是join的一部分。连接中涉及的子查询是独立的,不会相互看到。这是join操作,它通过某些字段将它们关联起来。

如果您想查看子查询中的item,请使用from代替join

from item in query
from sub in 
(
    // Here you can access the item
)
  

另外我如何只从子查询中获取第一项?

您可以,但之后您无法使用join运算符,因为join运算符正在关联两个

所以要么执行一个group join,然后从内部集合中获取第一个元素:

from item in query
join sub in (...) on item.t_id equals sub.t_id into subs
let sub = subs.FirstOrDefault()

或使用相关子查询并取第一个元素:

from item in query
let sub = (from confs in db.ConfigurationsTable
           where confs.t_date_start_val <= item.date && confs.t_date_end_val >= item.date
               // Here is the correlation (confs field could be different)
               && confs.t_id == item.t_id
           select new{ .. }
          ).FirstOrDefault()