多表linq查询?

Bas*_*mme 3 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"
Run Code Online (Sandbox Code Playgroud)

我已经写过了

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.???}
Run Code Online (Sandbox Code Playgroud)

http://paragy.wordpress.com/2010/11/18/multiple-joins-with-linq-and-lambda/的帮助下

我不是linq的快乐用户.其实我不喜欢linq因为这种要求.这个很简单但是当你尝试复杂的请求时,linq是一个噩梦.动态请求甚至更糟糕.我总是遇到linq语法的问题,网络并没有真正的帮助.我没有找到正确的文档来编写查询.

我想我不是第一个提出这个问题的人,但我发现的所有文件似乎都错了或者对我没有帮助.这是一个简单的查询,我找不到正确的帮助.我还在等一个人证明我的链接不仅仅是另一个POC.

Mar*_*zek 5

你错过了一个where条款.

你的SQL连接是常规INNER JOIN的,所以你不需要这些join ... into g from x in g.DefaultIfEmpty()- >你就是这样做的LEFT OUTER JOIN.

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
            };
Run Code Online (Sandbox Code Playgroud)