0

ユーザーと曲の 2 つのテーブルがあります。UserID 列で両方を結合し、リストをビューに返す必要があります。匿名型を書き込もうとしましたが、次のエラーが発生します。

「LINQ to Entities では、パラメーターなしのコンストラクターと初期化子のみがサポートされています。」

参加してリストに戻るにはどうすればよいですか?

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

    }

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

私のlinqクエリの戻り値の型は何ですか?

私が最終的に得たクエリは次のとおりです。

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

2 に答える 2

2

エラーメッセージはかなり明確ですよね?

linq2entity クエリで新しい HomeSongList を作成しようとしました (これは SQL に変換されます: 不可能です)。

「ユーザープロパティ」の修正では、

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);
于 2012-05-10T22:27:26.577 に答える
2

パラメーター化されたコンストラクターは使用できませんが、イニシャライザーは使用できます。select を次のように変更すると、動作するはずです。

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

HomeSongListこれには、パラメーターなしのコンストラクターと書き込み可能なプロパティが必要であることに注意してください。

于 2012-05-10T23:16:15.837 に答える