.NET 8, запрос EF Core не удалось перевести при использовании статической коллекции/списка в качестве поляC#

Место общения программистов C#
Ответить
Anonymous
 .NET 8, запрос EF Core не удалось перевести при использовании статической коллекции/списка в качестве поля

Сообщение Anonymous »

Мне интересно следующее:
  • Почему EF Core не может преобразовать статический ICollection только для чтения и статический только для чтения IList в запрос при использовании его внутри .Contains()? При удалении ключевого слова static кажется, что запрос выполняется нормально?
  • При использовании IEnumerable Это не проблема, это из-за разные .Contains(), которые используются?
    Это происходит только тогда, когда список/коллекция являются статическими. Почему здесь это так важно для перевода запроса?< /li>
Я получил это из исключения: https://learn.microsoft.com/en-us/ef/co ... lient-eval, но это на самом деле не объясняет мне, почему это происходит только при использовании статической коллекции.
Скажем, у меня есть эта модель базы данных при использовании EF Core:

Код: Выделить всё

public class Item
{
public string Bar { get; set; }
public string Foo { get; set; }
}
И в моем классе у меня есть следующее поле (это может быть статический IList, доступный только для чтения, или статический ICollection, доступный только для чтения):
р>

Код: Выделить всё

private static readonly IList AllowedFooCodes = new List() { "ABC", "CED" };
Мой класс базы данных выглядит примерно так:

Код: Выделить всё

public class SampleDataRepository : ISampleDataRepository
{
private readonly ILogger _logger;
private readonly SampleDataStore _sampleDataStore;

// Can be IList or ICollection, exception will be thrown regardless.
private static readonly IList AllowedFooCodes = new List() { "ABC", "CED" };

public SampleDataRepository(SampleDataStore store, ILogger logger)
{
_sampleDataStore = store;
_logger = logger;
}

public async Task GetItems()
{
_sampleDataStore.Items
.AsNoTracking()
.Where(item => AllowedFooCodes.Contains(item.foo))
.ToListAsync();
}
}
Жду ваших ответов.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ection-lis
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»