Simple.Data一个方向加入表两次

时间:2013-02-11 21:24:51

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

我有一个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但没有任何成功。有什么想法吗?

1 个答案:

答案 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?这可能有助于揭开一些亮点。