Значение не может быть нулевым исключением во время выполнения в троичном операторе в проекции 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

Другие вопросы по тегам