Значение не может быть нулевым исключением во время выполнения в троичном операторе в проекции EF core 2.1
На самом деле, у меня есть проблемы с тем, что я не могу установить нулевое значение вместо значения по умолчанию для поля NULL.
Я не могу написать правильный код с EF core 2.1 в операторе выбора, потому что я столкнулся с исключением во время выполнения "значение не может быть нулевым" или невозможно использовать нулевой оператор распространения.
Примечание: если это важно, строки, взятые из подобъекта в запросе.
VotedAt = i.CurrentUserVote == null
? new DateTimeOffset()
: i.CurrentUserVote.VotedAt,
CurrentUserVote = i.CurrentUserVote == null
? false
: i.CurrentUserVote.IsPositive,
Я хотел бы написать:
VotedAt = i.CurrentUserVote == null
? null
: i.CurrentUserVote.VotedAt,
CurrentUserVote = i.CurrentUserVote == null
? null
: i.CurrentUserVote.IsPositive,
Или даже:
VotedAt = i.CurrentUserVote?.VotedAt,
CurrentUserVote = i.CurrentUserVote?.IsPositive,
Другая запрошенная информация от сообщества: Выбранная организация:
public class IssueListItem
{
public int Id { get; set; }
public string Title { get; set; }
public Votes Votes { get; set; }
}
public class Votes
{
public int Positive { get; set; }
public int Negative { get; set; }
public int All { get; set; }
public bool? CurrentUserVote { get; set; }
public DateTimeOffset? VotedAt { get; set; }
}
Выбор:
return _unitOfWork.Issues.GetQuery()
.Filter(query.Filter)
.WithVotes<Issue, IssueVote, int>(currentUserId)
.Order(query.Sorter)
.Select(i => new IssueListItem
{
Id = i.Item.Id,
Votes = i.Votes,
Title = i.Item.Title,
//removed some other properties
})
.ToListAsync();
где WithVotes<Issue, IssueVote, int>(currentUserId)
является:
return q
.Select(i => new
{
Item = i,
VoutesGroups = i.Votes
.GroupBy(v => v.IsPositive, v => true, (key, vg) => new { IsPositive = key, Count = vg.Count() }),
CurrentUserVote = currentUserId == null ? null : i.Votes.FirstOrDefault(v => v.CreatedById == currentUserId),
})
.Select(i => new AssignVotesModel<TEntity, TVote, TId>
{
Item = i.Item,
Votes = new Votes
{
Positive = i.VoutesGroups.Where(vg => vg.IsPositive == true).Sum(vg => vg.Count),
Negative = i.VoutesGroups.Where(vg => vg.IsPositive == false).Sum(vg => vg.Count),
All = i.VoutesGroups.Sum(vg => vg.Count),
VotedAt = i.CurrentUserVote == null ? new DateTimeOffset() : i.CurrentUserVote.VotedAt,
CurrentUserVote = i.CurrentUserVote == null ? false : i.CurrentUserVote.IsPositive,
}
});
1 ответ
Определенный столбец, вероятно, не может быть нулевым в базе данных или в вашем сопоставлении сущностей.
Убедитесь, что ваша модель сущности не имеет Required
приписывать. Также убедитесь, что указанное свойство не помечено Required
в modelBuilder
конфигурации.
Наконец, проверьте столбец таблицы в вашей РСУБД, установлен ли он как IS NOT NULL