【问题标题】:Simple.Data One Direction Join on a Table TwiceSimple.Data 单向连接表两次
【发布时间】:2013-01-27 02:02:46
【问题描述】:

我有一个用户表和一个消息表。 Messages 表有两个对 Users 表的外键引用,“To_Id”和“From_Id”都指向 User.Id。我想编写一个查询,该查询将返回消息并允许我从由 To 和 From 关系表示的 User 获取 Username 属性。到目前为止,这是我所拥有的:

dynamic sender;
dynamic recipient;
var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id)
    .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id)
    .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id)
return messages;

此查询的结果为我提供了正确的消息计数,但 To_Id 和 From_Id 列消失了,并且 Sender 和 Recipient 列名称也没有出现。我尝试查看文档、github 上的源代码和这里的问题:Simple.Data - how to bi-drectionally join on the same table twice,但没有任何成功。有什么想法吗?

【问题讨论】:

    标签: c# asp.net-mvc join simple.data


    【解决方案1】:

    我不知道您的 To_Id 和 From_Id 列会发生什么,但如果您想预先加载用户行,您需要添加 With 子句:

    dynamic sender;
    dynamic recipient;
    var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id)
        .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id)
        .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id)
        .With(sender)
        .With(recipient);
    return messages;
    

    至于缺少的列,您是否尝试过查看 Trace 以查看正在为查询执行的 SQL?这可能有助于阐明一些观点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2020-09-15
      • 2013-01-09
      • 2021-11-08
      相关资源
      最近更新 更多