【问题标题】:Perform LINQ join with two conditions使用两个条件执行 LINQ 连接
【发布时间】:2021-06-21 19:28:41
【问题描述】:

查看了其他一些答案,但不适用于这种情况。在 vb.net 中,这是我想要实现的目标:

Dim query = From o In dbDS.gi_organisation
            Join g In dbDS.gi_game On o.ID Equals g.DeveloperID Or o.ID Equals g.PublisherID

无法编译。

沿着这些思路有很多解决方案(c#):

var messages = from m in db.Message 
           join p in db.MessagePart 
           on new { m.ID, false } equals { p.MessageID, p.IsPlaintext }

但我无法终生将它应用到我的场景中。有人可以帮忙吗?

【问题讨论】:

  • 尝试使用where,删除on-equals --> where o.ID Equals == g.DeveloperID || o.ID == g.PublisherID
  • 也许我的SQL to LINQ Recipe 可以帮助你。基本上,您必须将左连接替换为外连接(from o...from g...where)。

标签: .net linq join


【解决方案1】:

答案是完全放弃 JOIN 并混合使用 linq 和 lambda:

Dim query = From o In dbDS.gi_organisation
            From g In dbDS.gi_game.Where(Function(x) x.DeveloperID = o.ID Or x.PublisherID = o.ID)

并控制外键中的任何空值:

Dim query = From o In dbDS.gi_organisation
            From g In dbDS.gi_game.Where(Function(x) (Not x.IsDeveloperIDNull AndAlso (x.DeveloperID = o.ID)) Or
                                                     (Not x.IsPublisherIDNull AndAlso (x.PublisherID = o.ID)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多