Sql 使用Linq或实体框架查询将列和变量值连接到

Sql 使用Linq或实体框架查询将列和变量值连接到,sql,entity-framework,linq,entity-framework-6,Sql,Entity Framework,Linq,Entity Framework 6,我想使用一列和一个变量值将join应用到命令中 下面是代码(查询中我遇到问题的部分): 这段代码可以工作,但我还需要根据用户id过滤db.user\u tests。我在函数中的变量userId中包含该用户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() 但是我得

我想使用一列和一个变量值将
join应用到
命令中

下面是代码(查询中我遇到问题的部分):

这段代码可以工作,但我还需要根据用户id过滤
db.user\u tests
。我在函数中的变量userId中包含该用户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()
但是我得到的
“运算符&&不能应用于long和bool类型的操作数”
错误

我尝试了
equal
,但它抛出了几个错误

我也尝试了,但是我在比较中使用了一个变量,所以它不起作用


如何将“联接到”与列比较和变量同时使用?

如果要联接多个属性,应使用匿名对象:

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
对象的一部分,将该变量用作join的一部分是没有意义的。您只需加入
test\u id
并使用
user\u 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()

是的,我正在用相同的类型进行检查,因为它以前遇到过一个错误。所以我再次进行强制转换和检查。@IDANSHECTER若匿名对象的顺序、名称和类型相同,那个么查询将被编译并执行,不会出现任何问题。生成的查询将类似于a.Id=p.test\u Id和@userId=p.user\u Id上的
,用户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()