LINQ实体向前看,在下一行中值



查询我的实体框架db时,我正在尝试根据2行的值匹配条件。

我当前的查询看起来像这样:

var query = context.table.where(x => x.row > 2);

这一切都很好。

我现在想实现的是根据当前和下一行中的值查询表:

var query = context.table.where(x => x.row > 2 && x.row[next row up in DB] < 2);

可以做到这一点。

我知道我可以在代码中实现这一目标,但是可以在单个查询中使用LINQ和实体来完成吗?

这是我如何使用SQL进行此操作的一个示例:

SELECT *
FROM t_Table p
INNER JOIN t_Table f
ON (p.id + 1) = f.id
WHERE p.column = whatever
AND f.column = whatever2

将您的样本SQL转换为SQL:

var ans = from p in t_table
          from f in t_table
          where (p.id+1) == f.id && p.column == whatever && f.column == whatever2
          select new { p, f };

这似乎并不是在SQL中生成内部连接,而是一个交叉加入,但我认为SQL引擎会适当处理它。请注意,linq只能进行等电量。

我没有意识到您可以在LINQ加入中的某些表达式,只要是主要操作员,这会产生一个子选择和内部连接,这似乎更快了:

var ans = from p in t_table
          where p.column == whatever
          let pidplus1 = p.id+1
          join f in t_table on pidplus1 equals f.id
          where f.column == whatever2
          select new { p, f };

最新更新