rt

解决方案 »

  1.   

    orderby是非延迟查询操作符,它会破坏LINQ的延迟查询特性
    数据多的话,肯定影响效率
    稳定性不用担心
      

  2.   

      var q = from p in persons 
                    orderby p.Level, p.Name
                    group p.Name by p.Level into g
                    select new {Level = g.Key, Persons = g};
      

  3.   

    稳定的,这是msdn文档明确指出的。其实不稳定排序算法稍作变通都可以变为稳定排序,所以不能说稳定排序就不是快排。
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/bb534966.aspx此方法通过使用延迟执行实现。即时返回值为一个对象,该对象存储执行操作所需的所有信息。只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。
     
    若要按元素自身的值对序列进行排序,请为 keySelector 指定标识函数(在 Visual C# 中为 x => x;在 Visual Basic 中为 Function(x) x)。
     
    定义了两种方法来扩展 IOrderedEnumerable<TElement> 类型,该类型为此方法的返回类型。这两种方法(即 ThenBy 和 ThenByDescending)使您能够指定附加排序条件,以便对序列进行排序。ThenBy 和 ThenByDescending 还返回一个 IOrderedEnumerable<TElement>,这意味着可对 ThenBy 或 ThenByDescending 执行任意数量的连续调用。
     
    注意由于 IOrderedEnumerable<TElement> 继承自 IEnumerable<T>,因此您可以根据对 OrderBy、OrderByDescending、ThenBy 或 ThenByDescending 的调用结果来调用 OrderBy 或 OrderByDescending。执行此操作会产生一个新的主排序,它忽略以前建立的排序。
     
    此方法使用默认的比较器 Default 对键进行比较。 此方法执行稳定排序,也就是说,如果两个元素的键相同,则保留这两个元素的顺序。相反,不稳定排序不保留具有相同键的元素的顺序。
     
    在查询表达式语法中,orderby (Visual C#) 或 Order By (Visual Basic) 子句转换为 OrderBy 的一个调用。