0

我有一个用户表和一个消息表。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同一张桌子两次但没有任何成功。有任何想法吗?

4

1 回答 1

2

我不知道您的 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?这可能有助于阐明一些观点。

于 2013-02-12T00:15:17.953 回答