У меня есть строка кода LINQ, которая генерирует исключение System.NotSupportedException.Почему LINQ-версия этого цикла foreach генерирует исключение NotSupportedException («NotSupportedException»)?
return unconvertedUrls
.Select(potentialQueryURL => ConvertPotentialQueryURLToSeed(potentialQueryURL))
.Where(id => id > 0)
.ToList();
Сообщение исключение «Метод„Int32 ConvertPotentialQueryURLToSeed (SeedsSQLConnector.PotentialQueryURL)“не поддерживается перевод на SQL»
Однако простое преобразование в цикле Еогеасп работает без проблем.
var result = new List<int>();
foreach (var potentialQueryURL in unconvertedUrls)
{
var id = ConvertPotentialQueryURLToSeed(potentialQueryURL);
if (id > 0)
{
result.Add(id);
}
}
return result;
Что происходит не так и почему?
========== ========== EDIT
Одд, коллега предложил другое исправление, которое тоже работает. Похоже, LINQ передавал в базу данных ConvertPotentialQueryURLToSeed! Во всяком случае, вот другой фикс, который должен добавить .ToList() к предыдущему заявлению:
var unconvertedUrls = (from url in _DataContext.PotentialQueryURLs
where !convertedUrlIds.Contains(url.Id)
select url).ToList();
return unconvertedUrls
.Select(potentialQueryURL => ConvertPotentialQueryURLToSeed(potentialQueryURL))
.Where(id => id > 0)
.ToList();
Я подозреваю, что вы используете EF или NHibernate, проблема в том, что ORM не может перевести то, что вы ввели в SQL. Что делает ваша функция? Можете ли вы показать нам это? Второй пример работает, потому что вы не запрашиваете базу данных. – mattytommo