У меня есть несколько классов,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();
Так я в том числе «художника» по «Include()», а затем создать новый AlbumResponse где я создаю новый ArtistResponse. К сожалению, это не сработает. Он выдает исключение InvalidOperationException. «i.artist.ArtistId» - это нуль, я не знаю, почему, без инициализации ArtistId все работает отлично, только с «Name = i.artist.Name» работает отлично.
Как подключить ArtistId к 'artist' в 'AlbumResponse'? Исключение: «Приведение значения к типу« System.Int32 »не выполнено, потому что материализованное значение равно нулю. Либо общий параметр результата, либо запрос должны использовать тип с нулевым значением« Классы Альбом и Исполнитель находятся в базе данных, AlbumId и ArtistId являются ненулевой. ArtistResponse и AlbumResponse просто «лишние» классы для добавления или получать информацию из базы данных, так ArtistId и ALBUMID в «* Ответ» просто INTS
Это не работает, оно показывает ошибку на «HasValue», «int не содержит определения для hasValue ...». – Pawel
Попробуйте сделать свойство ArtistId класса ArtistResponse нулевым в соответствии с моим редактированием. – mm8
Сейчас он работает :), но я действительно не понимаю, почему .. Не могли бы вы объяснить это, пожалуйста? – Pawel