2012-05-10 12 views
0

ユーザーと曲のテーブルが2つあります。私は両方のUserID列にJOINし、ビューにリストを返す必要があります。私は匿名型を書いたが、私はに関するエラーを取得しています試してみました:LINQ to Entitiesと2つのテーブルを結合する

「はパラメータなしのコンストラクタと初期化子はエンティティへのLINQでサポートされています。」

どのようにしてJOINしてリストに戻ることができますか?

public class User 
    { 
     [Key] 
     public virtual Guid UserId { get; set; } 

     [Required] 
     public virtual String Username { get; set; } 

     [Required] 
     public virtual String Email { get; set; } 

     [Required, DataType(DataType.Password)] 
     public virtual String Password { get; set; } 

} 





public class Song 
    { 
     public int SongId { get; set; } 

     public virtual Guid UserId { get; set; } 

     public string SongTitle { get; set; } 

    } 

私はここにこのような方法を実装しようとした:

What is the return type of my linq query?

私がなってしまったクエリがあった。

var query = from u in db.Users 
         join s in db.Songs 
         on u.UserId equals s.UserId 
         select new HomeSongList(s.SongId, s.UserId, u.Username); 


      return View(query.ToList()); 
+0

あなたが試したことを示すことができますか? – BrokenGlass

+0

これは最初のコードのようです:なぜ、あなたは "public virtual guid UserID"を持っていて、 "public virtual user"ではないのですか?私はFKがバーチャルでなければならないとは思わない、参考プロパティは(怠惰な世界で) –

+0

良いキャッチ、私は気付かなかった。 – user547794

答えて

2

あなたはパラメータ化コンストラクタを使用することはできませんが、あなたはそれが動作するはずです以下に、あなたの選択を変更する場合は、初期化子を使用することができます。これはHomeSongListは、パラメータなしのコンストラクタと書き込み可能な性質を持っていることを必要とすること

select new HomeSongList{SongId=s.SongId, UserId=s.UserId, Username=u.Username}; 

は注意してください。

2

まあエラーメッセージはありません、むしろ明確です?

あなたは(SQLに翻訳されますことはできません)linq2entityクエリで新しいHomeSongListを作成しよう

「ユーザープロパティ」補正では、あなたは

var query = db.Songs.Select(s => new{ 
         songId = s.SongId, 
         userId = s.User.UserId, 
         userName = s.User.Username}) 
        .ToList() 
        .Select(x => new HomeSongList(x.songId, x.userId, x.userName); 

かとを行う必要がありますあなたの実際のコード

var query = (from u in db.Users 
         join s in db.Songs 
         on u.UserId equals s.UserId 
         select new { 
          songId = s.SongId, 
          userId = s.UserId, 
          userName = u.Username 
         })//new anonymous object is possible in linq2entities 
         .ToList() 
         .Select(x => new HomeSongList(x.songId, x.userId, x.userName); 
+0

どのように私のビューを強く入力するのですか?それはリストを返すので、@ modelリスト user547794

+0

のようなものは必要ありません。このクエリのリストまたはIList。 –

+0

ところで、@ Guvanteの答えを見て、それは(制約が与えられている)最良の方法です。 –

関連する問題