【发布时间】:2019-09-10 23:36:11
【问题描述】:
我希望能够使用通用方法来选择一个属性并将其传递给Any() 方法。
private List<TModel> _models;
public bool Any<TModel, TProperty>(
Expression<Func<TModel, TProperty>> propertySelector,
TModel model)
{
// ....
}
// OR
public bool Any<TModel, TProperty>(
Func<TModel, TProperty> propertySelector,
TModel model)
{
// ....
}
我不确定如何使用 propertySelector 并将其与 Any() 上的 List<TModel> 一起使用。
这很接近,但我错过了一些东西:
_models.Any(m => propertySelector(m) == propertySeletor(model));
运算符“==”不能应用于“TProperty”和“TProperty”类型的操作数
我在这里错过了什么?
这个问题更像是一个人为的例子,因为表达式最终会被entity-framework-core 使用来构建查询。
【问题讨论】:
-
我猜
propertySelector(model)在_models的迭代过程中不会改变。你能做一些将m => propertySelector(m)作为表达式,并将propertySelector(model)的结果作为TProperty 的东西吗?我正在考虑在EqualExpression中将前者表达式与后者组合为ConstantExpression并从中创建一个委托。 -
您在
propertySelector(model)上是正确的。我不太确定你的第二句话是什么意思,也不知道为什么TProperty的结果会解决问题(尤其是基于异常消息)。 -
我想我也是。如果我指定类型(字符串,int,long),它似乎可以工作,而不是使 TProperty 通用。我认为这是我必须为每种值类型构建一个的情况之一。
-
嘿,它对你有用,太好了。感谢您回来并接受它。
-
@madreflection 我讨厌开放式问题...
标签: entity-framework-core c# generics lambda entity-framework-core expression