我有一个Users表和一个Messages表。 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列消失,并且也不显示发件人和收件人列名称。我试着查看文档,github上的源代码和这个问题:Simple.Data - how to bi-drectionally join on the same table twice但没有任何成功。有什么想法吗?
答案 0 :(得分:2)
我不知道您的To_Id和From_Id列会发生什么,但如果您想要加载Users行,则需要添加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?这可能有助于揭开一些亮点。