我无法以正确的方式编写以下查询。 对于查询中的每个项目,我想加入第一个有效配置。
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);
项在子查询中不可见。 另外我如何只从子查询中获取第一项?
答案 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()