.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

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