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

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

Сообщение Anonymous »

Мне интересно следующее:

[*]Почему EF-Core не может преобразовать статический ICollection только для чтения & статическое поле IList, доступное только для чтения, в запрос при его использовании внутри .Contains()? Кажется, что при удалении ключевого слова static запрос выполняется нормально?

[*]При использовании IEnumerable Это не проблема, это из-за другого используемого .Contains()?

[*]Это происходит только когда список/коллекция статичны, почему это так важно для перевода запроса?
Я получил это из исключения: https://learn.microsoft.com/en -us/ef/core/querying/client-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#»