2016-03-26 27 views
0

私は1つのメソッドで作業しています。アーティストとアルバムの2つのモデルがあります。アーティストに属するArtistIDフィールドに基づいてアーティストに属するすべてのアルバムを表示したい私はViewModelを作ったのです。私はモデルとコントローラから分離した私のメソッドで動作するためにOperationsという別のクラスで作業しています。ラムダ式で作業していますが、ArtistID = idパラメータの "where"条件を設定する方法はありません。あなたはこれを行う方法を知っていますか?メソッドは、2つのテーブルからjoinとwhere句を使用してViewModelを返します

これらはモデルです:

public class Artist 
{ 
    public int ArtistID { get; set; } 
    [Display(Name ="Artist name")] 
    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; } 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString ="{0: dd/MM/yyyy}")] 
    [Display(Name ="Date created")] 
    public DateTime DateCreated { get; set; } 

} 

これはViewModelにある:

public class ArtistAlbumVM 
{ 
    public int ArtistAge { get; set; } 
    public string ArtistName { get; set; } 
    public string ArtistLastName { get; set; } 
    public DateTime AlbumDate { get; set; } 
    public string AlbumName { get; set; } 
} 

そして、これは私が話しているmethdoで、私は「どこを設定する方法がわかりません「条件ArtistID = id

public class Operations 
{ 
    MusicStoreDbContext db = new MusicStoreDbContext(); 
    public List<ArtistAlbumVM> GetAlbumsByArtist(int id) 
    { 
     var list = db.Albums.Join(db.Artists, al => al.ArtistID, ar => ar.ArtistID, 
      (al, ar) => new ArtistAlbumVM { 
       ArtistAge = ar.Age, 
       ArtistName =ar.Name, 
       ArtistLastName = ar.LastName, 
       AlbumDate = al.DateCreated, 
       AlbumName = al.AlbumName 
      }); 
    } 
} 

答えて

1

あなたはLINQ where句を使用することができます。

public List<ArtistAlbumVM> GetAlbumsByArtist(int id) 
{ 
    return db.Albums.Where(s=>s.ArtistId==id) 
        .Select(x=> new ArtistAlbumVm 
         { 
          ArtistAge = x.Artist.Age, 
          ArtistName =x.Artist.Name, 
          ArtistLastName = x.Artist.LastName, 
          AlbumDate = x.DateCreated, 
          AlbumName = x.AlbumName 
          }).ToList(); 
} 
+0

私はあなたが彼のコードで参加を見落としたと思います。 –

+1

@Reddy結果を制限するには、where句を指定するために['Where'](https://msdn.microsoft.com/en-us/library/bb534803(v = vs.100).aspx)メソッドを使用します。答えの主な部分は 'db.Albums.Where(s => s.ArtistID == id)'です。それで 'Album'と' Artist'の関係があれば 'Join'メソッドを使う必要はなく、' Album'の 'Artist'プロパティからアーティストに関する情報を得るだけで十分です。それ以外の場合は、あなたの質問と同様に 'Join'を使用することができます。 –

+0

@RezaAghaeiはい、私はその論理を理解しました。私は既にモデルを持っています。そして、私の質問ではない:p –