使用lambda表达式使用.Find()将数据分配给查询中的ViewModel

时间:2014-07-12 17:41:51

标签: c# asp.net-mvc linq asp.net-mvc-viewmodel

我正在编写一个简单的MVC应用程序来学习ASP.NET MVC。我正在关注Pluralsight课程,他们给了我很大的帮助。但是,当涉及到LINQ时,我仍然处于黑暗中。

我有一段工作代码,我想知道它是否可以改进或更简洁。

需要做什么:

  1. 根据给定的ID(主键)
  2. 从我的数据库中提取数据
  3. 创建一个新的BoardViewModel(),仅指定标题
  4. 返回BoardViewModel的实例,其Title属性设置为
  5. 目前,我有两种方法可以做到这一点:

    var board =
        db.Boards
            .Where(b => b.Id == id)
            .Select(b => new BoardViewModel {
                Title = b.Title
            })
            .First();
    

    方法2:

    var board = 
        db.Boards
            .Find(id);
    
    BoardViewModel model = new BoardViewModel();
    model.Title = board.Title;
    

    我最想知道的是,在我请求多个结果的查询中,我能够在Select扩展方法中使用lambda表达式将值赋给ViewModel,我可以在查询中使用类似的东西吗?我正在使用Find方法吗?

    例如,看起来像这样:

    var board = 
        db.Boards
            .Select(b => new BoardViewModel {
                Title = b.Title
            }
            .Find(id);
    

    我对接近这个问题的其他方式非常感兴趣。

1 个答案:

答案 0 :(得分:3)

这样的东西?假设你期望一个具有给定id的记录。

var board = db.Boards.Select(b => new BoardViewModel
    {
        Title = b.Title
    }).FirstOrDefault(b => b.Id == id)