获取用于表达式的通用类型的属性类型

韦斯·道尔

我有一个方法作为泛型类的一部分,用于查询满足表达式中的布尔子句的对象集合,并且结果按对象类型的某些属性排序。

当前方法签名:

Task<T> GetFirstWhere(Expression<Func<T, bool>> whereExp, Expression<Func<T, DateTime>> orderByExp)

通过示例实现:

public async Task<T> GetFirstWhere(Expression<Func<T, bool>> whereExp, Expression<Func<T, DateTime>> orderByExp) {
    return await _entities.Where(whereExp)
        .OrderByDescending(orderByExp)  // I would like to use any valid orderByExp type here
        .FirstOrDefaultAsync();
}

适用于以下场景:

var foundArticleTag = await _tags.GetFirstWhere(
    tag => tag.Name == articleTag, 
    tag => tag.CreatedOn);

我希望orderByExp函数在T上使用任何有效类型的属性,而不是显式地使用DateTime。我不希望使类型成为动态类型,以便仅使用T上有效的属性类型。我想为此必须进行反思,尽管我不确定如何强制执行类型约束。

大师斯特隆

看来您的方法是的泛型类型的一部分T,您也可以使方法也泛型(接受用于排序表达式的另一个泛型类型参数):

Task<T> GetFirstWhere<TOrder>(
    Expression<Func<T, bool>> whereExp, 
    Expression<Func<T, TOrder>> orderByExp);

这将需要将通用参数添加到示例实现中:

public async Task<T> GetFirstWhere<TOrder>(Expression<Func<T, bool>> whereExp, Expression<Func<T, TOrder>> orderByExp) {
    return await _entities.Where(whereExp)
        .OrderByDescending(orderByExp)  // I would like to use any valid orderByExp type here
        .FirstOrDefaultAsync();
} 

而且用法应该保持不变,因为编译器应该能够TOrder从用法中推断出通用类型参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式,用于获取C类型定义

来自分类Dev

获取类型名称或表达式的类型

来自分类Dev

使用Lambda表达式获取属性或类型名称

来自分类Dev

如何使用Roslyn获取用户输入表达式的类型?

来自分类Dev

复杂类型属性的表达式

来自分类Dev

从表达式获取容器类型

来自分类Dev

获取 lambda 表达式的返回类型

来自分类Dev

如何编写用于从变量注释中获取变量类型的正则表达式?

来自分类Dev

用于检查文件类型的正则表达式

来自分类Dev

具有属性表达式的通用方法“无法根据使用情况推断出类型实参”

来自分类Dev

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

来自分类Dev

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

来自分类Dev

C#8开关表达式:找不到用于开关表达式的最佳类型

来自分类Dev

作为属性和对象类型的函数参数的表达式

来自分类Dev

表达式类型(数字)

来自分类Dev

Java表达式类型

来自分类Dev

从Swift REPL,如何获取表达式的静态类型?

来自分类Dev

如何获取ArrayLength类型表达式的MemberInfo?

来自分类Dev

使用decltype获取表达式的类型,而不使用const

来自分类Dev

在罗斯林中获取表达式类型的结果

来自分类Dev

如何获取ArrayLength类型表达式的MemberInfo?

来自分类Dev

在Roslyn中获取表达式类型的结果

来自分类Dev

正则表达式以获取URL中的文件类型

来自分类Dev

使用正则表达式获取 SNMP 陷阱类型

来自分类Dev

获取通用类型的ICollection属性

来自分类Dev

条件表达式-如何在条件表达式中获取报告类型

来自分类Dev

在java lambda表达式中获取不同返回类型的表达式

来自分类Dev

在Visual Studio 2015中获取用于JavaScript函数表达式的智能感知

来自分类Dev

在带有Swift的函数中使用类型擦除返回通用类型(无法转换类型的返回表达式…)

Related 相关文章

  1. 1

    正则表达式,用于获取C类型定义

  2. 2

    获取类型名称或表达式的类型

  3. 3

    使用Lambda表达式获取属性或类型名称

  4. 4

    如何使用Roslyn获取用户输入表达式的类型?

  5. 5

    复杂类型属性的表达式

  6. 6

    从表达式获取容器类型

  7. 7

    获取 lambda 表达式的返回类型

  8. 8

    如何编写用于从变量注释中获取变量类型的正则表达式?

  9. 9

    用于检查文件类型的正则表达式

  10. 10

    具有属性表达式的通用方法“无法根据使用情况推断出类型实参”

  11. 11

    属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

  12. 12

    属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

  13. 13

    C#8开关表达式:找不到用于开关表达式的最佳类型

  14. 14

    作为属性和对象类型的函数参数的表达式

  15. 15

    表达式类型(数字)

  16. 16

    Java表达式类型

  17. 17

    从Swift REPL,如何获取表达式的静态类型?

  18. 18

    如何获取ArrayLength类型表达式的MemberInfo?

  19. 19

    使用decltype获取表达式的类型,而不使用const

  20. 20

    在罗斯林中获取表达式类型的结果

  21. 21

    如何获取ArrayLength类型表达式的MemberInfo?

  22. 22

    在Roslyn中获取表达式类型的结果

  23. 23

    正则表达式以获取URL中的文件类型

  24. 24

    使用正则表达式获取 SNMP 陷阱类型

  25. 25

    获取通用类型的ICollection属性

  26. 26

    条件表达式-如何在条件表达式中获取报告类型

  27. 27

    在java lambda表达式中获取不同返回类型的表达式

  28. 28

    在Visual Studio 2015中获取用于JavaScript函数表达式的智能感知

  29. 29

    在带有Swift的函数中使用类型擦除返回通用类型(无法转换类型的返回表达式…)

热门标签

归档