La conversion vers le type de la valeur 'Int32" a échoué parce que le matérialisée valeur est null
Je ne peux pas pour la vie de me comprendre ce qu'est la question. Chaque fois que la requête va à exécuter "ToList()", j'obtiens l'erreur ci-dessus.
Voici plus d'informations sur elle:
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The cast to value type 'Int32' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace>
at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) at System.Data.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal) at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at TVDataWebAPI.Controllers.ETSShowsController.GetETSShows(String title, String episodeTitle, String genre, String showTypeDescription, String directorName, String releaseYear, String seasonEpisode) in c:\Users\rarbex\Documents\Visual Studio 2012\Projects\TVDataWebAPI\TVDataWebAPI\Controllers\ETSShowsController.cs:line 83 at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4() at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
</StackTrace>
</Error>
public IEnumerable<ETSShows> GetETSShows(string title = null,
{
string episodeTitle = null, string genre = null,
string showTypeDescription = null,
string directorName = null,
string releaseYear = null,
string seasonEpisode = null)
{
IQueryable<ETSShows> query = from shows in db.ETS_Shows
from episodes in db.ETS_Episodes.Where(v => v.ShowId == shows.ShowId).DefaultIfEmpty()
from genres in db.ETS_LKP_Genres.Where(s => s.GenreCode == shows.GenreCode).DefaultIfEmpty()
from showTypes in db.ETS_LKP_ShowTypes.Where(z => z.ShowTypeCode == shows.ShowTypeCode).DefaultIfEmpty()
from directors in db.ETS_Directors.Where(p => p.ShowId == shows.ShowId).DefaultIfEmpty()
select new ETSShows
{
dataSource = "ETS",
Title = shows.Title,
EpisodeId = episodes.EpisodeId,
EpisodeTitle = episodes.EpisodeTitle,
GenreDescription = genres.GenreDescription,
ShowTypeDescription = showTypes.ShowTypeDescription,
Name = directors.Name,
ReleaseYear = (int) shows.ReleaseYear,
SeasonEpisode = episodes.SeasonEpisode,
ShowId = shows.ShowId
};
}
}
public class ETSShows
{
public string dataSource { get; set; }
public string Title { get; set; }
public int EpisodeId { get; set; }
public string EpisodeTitle { get; set; }
public string GenreDescription { get; set; }
public string ShowTypeDescription { get; set; }
public string Name { get; set; }
public int ReleaseYear { get; set; }
public string SeasonEpisode { get; set; }
public int ShowId { get; set; }
}
Vous devez vous connecter pour publier un commentaire.
Je suppose que la question est ici:
Pourquoi avez-vous de jeter
shows.ReleaseYear
à unint
? Est-ce parce que ce n'est pas déjà unint
? Peut-être que c'est en fait unNullable<int>
?Un
int
ne pouvez pas tenir unnull
valeur, et l'erreur est vous dire que c'est rencontré unnull
valeur dans les données, de sorte que la valeur ne peut pas être converti en uneint
.Vous devrez modifier vos données, pour ne pas permettre
null
valeurs pour ce champ, ou de changer votre type deNullable<int>
(ouint?
pour faire court).Il vous dit juste:
C'est la ligne incriminée:
Vérifier vos données et assurez-vous que tout a un ReleaseYear, ou de passer à l'utilisation de
int?
.Si vous obtenez les valeurs null puis essayez d'utiliser ces méthodes pour la coulée -
Convertir.ToInt32(string), Ce serait de retour 0 si la valeur utilisée pour l'analyse de la valeur est null.
Int32.TryParse(string, hors int), ce serait retourner true /false quand il a pu analyser /pas respectivement.
Dans votre programme avant de consommer de la valeur analysée, vérifier si elle est valide ou pas.