EF Core не может перевести простой, где выражение linq - PullRequest
0 голосов
/ 11 июня 2019

мы недавно обновились для использования ef core 2.1.8, и теперь некоторые из наших запросов не выполняются.

Что-то столь же простое, как предложение where, заставляет ef оценивать его локально.

Iу меня есть языковая таблица со столбцом имени, я хочу выбрать все, где имя не равно нулю, но ни одно из этих двух произведений:

var searchQuery  = from q in context.Language
                          where (q.Name != null) select q;

var searchQuery = context.Language.Where(x => x.Name != null);

Оба оцениваются локально.Имя - это простая строка / столбец nvarchar.

Редактировать:

Язык - это частичный класс, который выглядит следующим образом:

public partial class Language
{
    public Language()
    {
        Segmentation = new HashSet<Segmentation>();
        SystemTranslation = new HashSet<SystemTranslation>();
    }

    public int Id { get; set; }

    [Required]
    [MaxLength(255)]
    public string Culture { get; set; }

    public ICollection<Segmentation> Segmentation { get; set; }
    public ICollection<SystemTranslation> SystemTranslation { get; set; }
}

public partial class Language : IIdentifiable<int>, ISearchable
{
    public string Name => CultureInfo.GetCultureInfo(Culture).DisplayName;
}

При следующей конфигурации:

void IEntityTypeConfiguration<EF.Entity.Core.Language>.Configure(EntityTypeBuilder<EF.Entity.Core.Language> builder)
    {
        builder.HasIndex(e => e.Culture)
              .HasName("IX_Culture")
              .IsUnique();
    }

1 Ответ

0 голосов
/ 11 июня 2019

Оказывается, я пытался выполнить запрос к вычисляемому свойству, что, конечно, означает, что ef не смог использовать его на стороне сервера, поскольку столбец с таким именем не существовал.

...