[*]Почему 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; }
}
Код: Выделить всё
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
Мобильная версия