C# 多表linq查询?

C# 多表linq查询?,c#,sql,linq,lambda,C#,Sql,Linq,Lambda,你能帮我用Linq和Lambda表达式翻译这个SQL查询吗 SELECT * FROM User JOIN UserIdentifier ON User.id = UserIdentifier.user_fk JOIN UserPassword ON User.id = UserPassword.user_fk WHERE UserIdentifier.identifier_value = "key" AND UserPassword.password = "1234" 我已经写了

你能帮我用Linq和Lambda表达式翻译这个SQL查询吗

SELECT * FROM User
  JOIN UserIdentifier ON User.id = UserIdentifier.user_fk
  JOIN UserPassword ON User.id = UserPassword.user_fk
  WHERE UserIdentifier.identifier_value = "key" AND UserPassword.password = "1234"
我已经写了这个

var query = from u in context.Users
            join ui in context.UserIdentifiers on u.id equals ui.user_fk into Joined
            from j in Joined.DefaultIfEmpty()
            join up in context.UserPasswords on u.id equals up.user_fk into Joined2
            from ???
            select new { id = u.id, identifier = j.identifier_value, password = Joined2.???}
借助

我不是linq的快乐用户。事实上,我不喜欢林克,因为这样的要求。这一个很简单,但当您尝试复杂的请求时,linq是一个噩梦。动态请求甚至是最糟糕的。我总是对linq语法有问题,而web并没有真正的帮助。我没有找到正确的文档来编写查询


我想我不是第一个问这个问题的人,但我发现的所有文档似乎都错了,或者对我没有帮助。这是一个简单的查询,我没有找到正确的帮助。我仍在等待有人证明link不仅仅是另一个POC。

您缺少一个
where
子句

您的SQL连接是常规的
内部连接
s,因此您不需要这些
连接。。。从g.DefaultIfEmpty()中的x进入g中
->这就是执行与
左外连接等价的操作的方式

var query = from u in context.Users
            join ui in context.UserIdentifiers on u.id equals ui.user_fk
            join up in context.UserPasswords on u.id equals up.user_fk
            where ui.identifier_value == "key" && up.password == "1234"
            select new
            {
                id = u.id,
                identifier = ui.identifier_value,
                password = up.password
            };

您不需要使用
into
子句来获得所需的SQL等价物。