Join with Where子句的查询和方法(lambda)语法的等效项

隐形熊猫

我简化的LINQJoinWhere两个表看起来像这样:

var join = context.Foo
  .Join(context.Bar,
    foo => new { foo.Year, foo.Month },
    bar => new { bar.Year, bar.Month },
    (foo, bar) => new { foo.Name, bar.Owner, foo.Year })
  .Where(anon => anon.Year == 2015).ToList();

另外,我本可以使用以下语法,希望与之等效:

var joinQuery = from foo in context.Foo
                join bar in context.Bar
                on new { foo.Year, foo.Month } equals new { bar.Year, bar.Month }
                where foo.Year == 2015
                select new { foo.Name, bar.Owner };
var join = joinQuery.ToList();

我发生的并且我想知道的一个区别是命令的顺序。在lambda-syntax联接中,我将该foo.Year属性添加到匿名返回类型中,以便可以进行过滤,而在其他查询中,我仍然可以子句中使用foobar如果需要)wherefoo.Year如果不需要,我不需要在此处将字段添加到返回类型中。

不幸的是,我没有ReSharper或类似的东西可以将较低的语句转换为lambda,以便我可以进行比较。

我实际上可以做的(并使上面的语句在结构上与下面的语句更相似)是在第一个Where(..)之间添加以下行ToList()

.Select(anon => new { /* the properties I want */ })

但这是否仅比第二条语句增加了“一个”匿名类型创建,还是我在这里弄错了?

简而言之:Join第二条语句的等效语法是什么?还是第一个加上所添加的值Select真的相等,即joinQuery内部是否产生相同的代码?

卢卡斯(Lucas Trzesniewski)

通常,您无法始终以与编译器完全相同的方式在查询理解语法和lambda语法之间进行转换这是由于使用了透明标识符但是您可以解决此问题并产生语义上等效的lambda语句。这就是ReSharper所做的。

无论如何,您可以添加:

.Select(anon => new { /* the properties I want */ })

这将为每行实例化一个匿名类型,但是不会再“一个”,因此不必担心:表达式被转换为SQL,因此中的new { foo.Year, foo.Month }语句join并没有真正实例化这些对象,它们只是转换为SQL。SELECT一旦检索到行,则只有最后一个选择将既用于SQL列表,又用于对象水化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 linq 或 lambda 中使用 join 和 where 子句编写 sql 查询

来自分类Dev

JOIN 和 WHERE 子句的索引

来自分类Dev

where子句和join的区别

来自分类Dev

如何使用JOIN和BETWEEN where子句加快MYSQL查询?

来自分类Dev

对 JOIN 和 UNION 以及子查询使用相同的“WHERE”子句

来自分类Dev

INNER JOIN与mysql中的max和where子句的子查询

来自分类Dev

where子句和join子句的索引

来自分类Dev

与join等效的基于方法的语法是什么

来自分类Dev

使用WHERE子句的MySQL LEFT JOIN查询

来自分类Dev

JOIN子句与WHERE

来自分类Dev

WHERE和JOIN子句定单执行

来自分类Dev

SQL Server LEFT JOIN和WHERE子句

来自分类Dev

WHERE和JOIN子句对订单的执行

来自分类Dev

带会话的INNER JOIN和WHERE子句

来自分类Dev

休眠中的join和where子句

来自分类Dev

MYSQL JOIN和IN子句

来自分类Dev

EXISTS子句和JOIN

来自分类Dev

JOIN子句与WHERE子句相比

来自分类Dev

使用join子句和group by子句的mysql查询

来自分类Dev

使用WHERE子句和INNER JOIN的MySQL更新查询不起作用

来自分类Dev

在同一查询中使用Join,Group By,Having和Where子句

来自分类Dev

MySQL-WHERE子句+ JOIN

来自分类Dev

MySQL LEFT JOIN的WHERE子句

来自分类Dev

HibernateCriteria left join with OR where 子句

来自分类Dev

带Lambda表达式中的Join的where子句

来自分类Dev

“ INNER JOIN”过滤条件在查询中的位置;ON或WHERE子句

来自分类Dev

如何在Access Join查询中添加where子句

来自分类Dev

Mysql查询结合join、group by、have和order by子句

来自分类Dev

WHERE子句或ON子句中的INNER JOIN条件?