【问题标题】:What is TKey in System.Linq.Expressions.Expression<Func<TSource,TKey>>?System.Linq.Expressions.Expression<Func<TSource,TKey>> 中的 TKey 是什么?
【发布时间】:2012-05-04 21:08:49
【问题描述】:

我正在尝试将 Linq OrderBy 子句所需的表达式存储在数据结构中,所以我可以直接使用 query = query.OrderBy(MySortExpression);

OrderBySystem.Linq.Expressions.Expression&lt;Func&lt;TSource,TKey&gt;&gt; 作为参数。 TSource 是您要排序的实体类型,但 TKey 应该是什么类型?

【问题讨论】:

    标签: c# linq expression


    【解决方案1】:

    TKey 是一个泛型类型参数,表示您排序的表达式的类型。例如,如果按长度对字符串进行排序,TSource 将是 stringTKey 将是 int,如下面的代码所示:

    string [] myStrings = new[] {"quick", "brown", "fox", "jumps"};
    var ordered = myStrings.OrderBy(s => s.Length);
    

    【讨论】:

      【解决方案2】:

      TKey 是表达式的返回类型的类型。例如:

      users.OrderBy(user => user.Name); 
      

      由于名称是字符串,所以类型为System.Linq.Expressions.Expression&lt;Func&lt;User,string&gt;&gt;

      【讨论】:

        【解决方案3】:

        TKey 未绑定到特定类型。通常它是将属性投影到原始类型以启用排序。

        假设Person 具有BirthYear 属性,您将选择

         persons.OrderBy(p => p.BirthYear);
        

        【讨论】: