我有几类,LINQ延迟加载和创建新的对象
public class Album
{
public int AlbumId { get; set; }
public string Title { get; set; }
public Genre genre { get; set; }
public virtual Artist artist { get; set; }
}
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
public virtual ICollection<Album> albums { get; set; }
}
public class ArtistResponse
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
public class AlbumResponse
{
public int AlbumId { get; set; }
public string Title { get; set; }
public Genre genre { get; set; }
public ArtistResponse artist { get; set; }
}
我试图与艺术家下载的所有专辑,并与AlbumResponse返回。 我有一个LINQ表达
return ctx.Albums.Include(i => i.artist).Select(i => new AlbumResponse
{
AlbumId = i.AlbumId,
artist = new ArtistResponse { Name=i.artist.Name, ArtistId=i.artist.ArtistId},
genre = i.genre,
Title = i.Title
}).ToList();
所以我包括“包括()”,然后创建,我创造新的ArtistResponse新AlbumResponse“艺术家”。不幸的是它不起作用。它引发一个InvalidOperationException异常。 “i.artist.ArtistId”是一个空,我不知道为什么,没有ArtistId初始化工作一切正常,只有“Name = i.artist.Name”完美地工作。
我如何附上ArtistId在“AlbumResponse”“艺术家”? 例外:“塑像,以价值型‘System.Int32’失败,因为物化值为null无论是结果型的泛型参数或查询必须使用可空类型。” 类专辑和艺术家都在数据库,ALBUMID和ArtistId是非空的。 ArtistResponse和AlbumResponse只是“额外”类添加或正从数据库信息,所以在“*回应”只是INTS
这不起作用,它显示“HasValue”错误,“int不包含hasValue的定义...”。 – Pawel
尝试使ArtistResponse类的ArtistId属性可以根据我的编辑为空。 – mm8
现在有效:)但我不明白为什么......请你解释一下吗? – Pawel