【问题标题】:Show join linq query in a View在视图中显示连接 linq 查询
【发布时间】:2016-03-27 01:00:58
【问题描述】:

我正在使用 ASP.net MVC,C# 我有两个模型类,Artist 和 Album,我创建了一个名为 Operations 的新单独类来将方法放在那里(我已经阅读了 MVC 实现的一个好习惯方法在单独的层中,而不是在 Controller 类或 Model 类中)。我想要一个方法来返回两个模型的信息,我已经创建了数据库,其中包含由 ArtistID 加入的两个表 Artist 和 Albums。我知道查询必须如何工作,但是应该返回什么方法呢?你知道开发这个的正确方法是什么吗?考虑到艺术家和专辑的混合,控制器将如何调用此方法并创建一个视图?我应该为此专门创建一个 ViewModel 吗?我该怎么做?

模型类:

 public class Artist
 {
        public int ArtistID { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        public virtual List<Album> Albums { get; set; }
 }

public class Album
{
        public int AlbumID { get; set; }
        public string AlbumName { get; set; }
        public virtual Artist Artist { get; set; }
        public int ArtistID { get; set; }              
}

Operations 类:我调用了 AlbumsByArtist 方法,它无法返回 Abum 列表,因为它返回 Artist 和 Album 之间的连接,应该返回什么?如何使用 Controller 将结果发送到 View 并在 View 中显示这些结果?

public class Operations
{
        MusicStoreDbContext db = new MusicStoreDbContext();
        public List<Album> AlbumsByArtist()
        {
            var temp = (from ar in db.Artists
                        join al in db.Albums on ar.ArtistID equals al.ArtistID
                        select new { al.AlbumName, ar.Name, ar.LastName });
            return temp;
        }
}

【问题讨论】:

    标签: c# sql asp.net-mvc entity-framework


    【解决方案1】:

    你必须在这里创建一个 ViewModel。 ViewModel 特定于我们的 View,我们希望根据需要在其中显示特定数据。我们应该始终为视图创建视图模型,而不是直接在视图中使用数据库模型:

     public class AlbumsByArtistVM
     {
           public string AlbumName {get;set;}
           public string ArtistName {get;set}
           public string ArtistLLastName {get;set;}
    
     }
    

    然后像这样返回:

    public List<AlbumsByArtistVM> AlbumsByArtist()
    {
        var temp = (from ar in db.Artists
                    join al in db.Albums on ar.ArtistID equals al.ArtistID
                    select new AlbumsByArtistVM
                    { 
                       AlbumName =al.AlbumName, 
                       ArtistName =ar.Name, 
                       ArtistLLastName  =ar.LastName 
                    });
        return temp;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      相关资源
      最近更新 更多