具有三个不同表的 ViewModel,如何通过 lambda 将三个表连接成一个结果?

ViewModel with three different tables, how to join the three tables by lambda into one result?

我有以下视图模型:-

public class PostCommentReplyViewModel
{
     public List<POST> PostViewModel { get; set; }
     public List<COMMENT> CommentViewModel { get; set; }
     public List<REPLY> PostViewModel { get; set; }
}

我的控制器中有以下操作:-

EntityDataModel db = new EntityDataModel();
var vm = new PostCommentReplyViewModel();
vm.PostViewModel = db.POSTs.Join(db.COMMENTs, b => b.user_id, c => c.user_id, (b, c) => b).ToList();
return View(vm);

现在这个操作 return 两个连接表的结果但是当我尝试将三个表连接成一个结果时我没有得到任何结果,我怎样才能将三个表连接成一个结果?

Linq Query Result to ViewModel

提前致谢:)

你是对的,你只需要添加第三个连接:

vm.PostViewModel = db.POSTs
            .Join(db.COMMENTs, b => b.user_id, c => c.user_id, (b, c) => b)
            .Join(db.REPLYs, b => b.user_id, c => c.user_id, (b, c) => b)
            .ToList();

没有结果的原因可能是您没有所有 3 个表中的数据可以通过相同的键进行 INNER JOINed。

感谢您的帮助,我发现对这个问题最有用的解决方案是从 ViewModel 创建单独的查询,然后通过魔术词 Union 将它们附加到一个变量,然后我向 ViewModel 询问对象。

神奇之处在于:

var resultOne = db.POSTs.Join(db.COMMENTs, b => b.user_id, c => c.user_id, (b, c) => b);
var resultTwo = db.POSTs.Join(db.REPLYs, b => b.user_id, c => c.user_id, (b, c) => b);
var resultUnion = resultOne.Union(resultTwo);
vm.PostViewModel = resultUnion.ToList();
return View(vm);