gpt4 book ai didi

c# - 如何在 linq where 子句中使用带有通用 func lambda 的表达式?

转载 作者:行者123 更新时间:2023-11-30 14:38:32 29 4
gpt4 key购买 nike

这是我的

private readonly Dictionary<Type, List<object>> _cache;

public IList<T> Get<T> (Expression<Func<T, bool>> criteria)
{
return _cache[typeof(T)].Where (criteria);
}

编译器(正确地)提示它不能从对象转换为 T。

我应该如何从那里开始?


解决方案

return _cached[type].AsQueryable().Cast<T>().Where (criteria).ToList()

我的想法是将 List 作为 IQueryable 然后我可以 Cast...

最佳答案

使用 .Cast<>() Extension Method :

private readonly Dictionary<Type, List<object>> _cache;

public IList<T> Get<T> (Expression<Func<T, bool>> criteria)
{
return _cache[typeof(T)].Cast<T>().Where (criteria).ToList();
}

如果您不确定所有元素都是 T 类型,您可以使用 .OfType<T>()相反(跳过无法转换的元素)

编辑您还需要使用.OfType<T>()当 T 是值类型(结构)时。

编辑 由于您的评论提到了 IQueryable,这可能会有所帮助:

return _cache[typeof(T)].AsQueryable().Cast<T>().Where (criteria).ToList();

关于c# - 如何在 linq where 子句中使用带有通用 func lambda 的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849019/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com