使用Linq或Entity Framework查询比较列和变量值

时间:2015-11-16 14:57:49

标签: sql entity-framework linq entity-framework-6

我想使用列和变量值来应用join into命令。

这里是代码(我遇到问题的查询的部分部分):

 join p in db.user_tests on a.id equals p.test_id into g3
 from x3 in g3.DefaultIfEmpty()

此代码有效,但我还需要通过user_id过滤db.user_tests。我在函数内的变量userId中有user_id。

所以我决定按如下方式编写查询:

join p in db.user_tests on a.id equals p.test_id && userId equals p.user_id into g3
from x3 in g3.DefaultIfEmpty()

但我收到"Operator && cannot be applied to operands of type long and bool"错误。

我尝试使用equal,但它会引发一些错误。

我也试过了the two column join,但我在比较中使用了一个变量,所以它不起作用。

如何将连接同时用于列比较和变量?

1 个答案:

答案 0 :(得分:1)

如果要加入多个属性,则应使用匿名对象:

join p in db.user_tests 
on new { a.id, userId } equals new { id = p.test_id, userId = p.user_id } into g3
from x3 in g3.DefaultIfEmpty()

还要确保匿名对象具有相同类型和名称的属性。

但是userId不是a对象的一部分,将该变量用作连接的一部分是没有意义的。您只需加入test_id并使用按user_id过滤:

join p in db.user_tests.Where(x => x.user_id == userId) 
on a.id equals np.test_id into g3
from x3 in g3.DefaultIfEmpty()