【问题标题】:ViewModel with three different tables, how to join the three tables by lambda into one result?ViewModel 有三个不同的表,如何通过 lambda 将三个表连接成一个结果?
【发布时间】:2019-12-24 19:43:25
【问题描述】:

我有以下 ViewModel:-

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);

现在此操作返回两个连接表的结果,但是当我尝试将三个表连接为一个结果时,我没有得到任何结果,如何将三个表连接为一个结果?

Linq Query Result to ViewModel

提前致谢:)

【问题讨论】:

    标签: c# join lambda asp-net-mvc-1


    【解决方案1】:

    你是在正确的方式,你只需要添加 3rd 加入:

    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 JOIN 的数据。

    【讨论】:

    • 也可以很方便的转换成非内连接:stackoverflow.com/a/19294132/2283405
    • 问题是查询中的键不一样,问题是我现在正试图以不同形式的查询从同一个表中获取多个结果..e.g.创建另一个连接两个表的查询并返回结果
    【解决方案2】:

    感谢您的帮助,我发现对这个问题最有帮助的解决方案是从 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);
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2020-09-15
      • 2020-12-10
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      相关资源
      最近更新 更多