C# 简单。数据在一个表上单向连接两次
我有一个用户表和一个消息表。Messages表有两个对Users表的外键引用,“to_Id”和“From_Id”都指向User.Id。我想编写一个查询,返回消息,并允许我从“收件人”和“发件人”关系所代表的用户处获取Username属性。以下是我目前掌握的情况:C# 简单。数据在一个表上单向连接两次,c#,asp.net-mvc,join,simple.data,C#,Asp.net Mvc,Join,Simple.data,我有一个用户表和一个消息表。Messages表有两个对Users表的外键引用,“to_Id”和“From_Id”都指向User.Id。我想编写一个查询,返回消息,并允许我从“收件人”和“发件人”关系所代表的用户处获取Username属性。以下是我目前掌握的情况: dynamic sender; dynamic recipient; var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.Fr
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;
此查询的结果为我提供了正确的邮件计数,但“收件人Id”和“发件人Id”列将消失,并且“发件人”和“收件人”列名也不会出现。我试着查看文档、github上的源代码以及这里的问题:还没有任何成功。有什么想法吗?我不知道您的to\u Id和From\u 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;
至于缺少的列,您是否尝试查看跟踪以查看正在为查询执行的SQL?这可能有助于揭示一些真相