我有一行抛出 System.NotSupportedException 的 LINQ 代码。
return unconvertedUrls
.Select(potentialQueryURL => ConvertPotentialQueryURLToSeed(potentialQueryURL))
.Where(id => id > 0)
.ToList();
异常消息是“方法 'Int32 ConvertPotentialQueryURLToSeed(SeedsSQLConnector.PotentialQueryURL)' 没有支持的 SQL 转换”
然而,简单转换为 foreach 循环运行没有问题。
var result = new List<int>();
foreach (var potentialQueryURL in unconvertedUrls)
{
var id = ConvertPotentialQueryURLToSeed(potentialQueryURL);
if (id > 0)
{
result.Add(id);
}
}
return result;
出了什么问题,为什么?
========== 编辑 ==========
奇怪的是,一位同事提出了另一个同样有效的修复方法。看起来 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();