Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单。数据在一个表上单向连接两次_C#_Asp.net Mvc_Join_Simple.data - Fatal编程技术网

C# 简单。数据在一个表上单向连接两次

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

我有一个用户表和一个消息表。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.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?这可能有助于揭示一些真相