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.
你错过了一个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)