我对 LINQ 表达式中的 Func 委托有问题。这是该方法的问题部分(repository.Items 是IQueryable<T>)
:
public static ActionResult XXX<T>(IRepository<T> repository,
Func<T, int> keyExtractor, int id = 0)
{
if (id == 0) return ...
T item = repository.Items.Where(x => keyExtractor(x) == id).
FirstOrDefault();
if (item == null) return ...
try {
repository.DeleteItem(item);
return ...
} catch (Exception e) {
return ...
}
}
但是当我运行该方法时,我收到错误,例如 LINQ 实体不支持节点类型。我也尝试过使用 predikate 的版本,但我一点运气都没有。
任何想法如何解决它?
我找到了一种可能的方法。LINQ 执行延迟执行,所以我必须首先像这样强制执行:
T item = repository.Items.AsEnumerable().Where(x => keyExtractor(x) == id)