【问题标题】:Multiple table linq query?多表linq查询?
【发布时间】:2014-08-01 05:18:10
【问题描述】:

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

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.???}

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

我不是一个快乐的 linq 用户。实际上我不喜欢 linq 因为这种请求。这很简单,但是当您尝试复杂的请求时,linq 是一场噩梦。动态请求更糟糕。我总是对 linq 语法有疑问,而网络并没有真正的帮助。我没有找到正确的文档来编写查询。

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

【问题讨论】:

    标签: c# sql linq lambda


    【解决方案1】:

    您缺少where 子句。

    而且您的 SQL 连接是常规的 INNER JOINs,因此您不需要这些 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
                };
    

    【讨论】:

    • 您不需要 into 子句来获得所需的 SQL 等效项。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2017-08-25
    • 1970-01-01
    • 2022-01-12
    • 2014-11-07
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多