此方法是使用延迟执行实现的。 即时返回值是一个对象, 该对象存储执行操作所需的所有信息。 此方法表示的查询在枚举对象之前不会执行, 方法是直接调用其GetEnumerator
方法, 或者通过在foreach
视觉C#对象中For Each
或在 Visual Basic 中使用。
白话:本身不发生变化,是在给其他列表时,按照排序的规格给别的列表拷贝。
实验代码
using System;
using System.Collections.Generic;
using System.Linq;
namespace 排序
{
class Pet
{
public string Name { get; set; }
public string Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine("OrderBy---------------------------------------------");
OrderByEx1();
Console.WriteLine("\nOrderByDescending---------------------------------");
OrderByEx2();
Console.ReadLine();
}
public static void OrderByEx1()
{
Pet[] pets = { new Pet { Name="Barley", Age="8" },
new Pet { Name="Boots", Age="4" },
new Pet { Name="Whiskers", Age="1" } };
IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
pets.OrderBy(pet => pet.Age);
Console.WriteLine("本身排序的数组 pets");
foreach (Pet pet in pets)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
Console.WriteLine("排序后的的列表 pets");
foreach (Pet pet in query)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
IEnumerable<Pet> query_ben = pets;
IEnumerable<Pet> query_bei = pets.OrderBy(pet => pet.Age);
Console.WriteLine("本身排序的列表 pets");
foreach (Pet pet in query_ben)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
Console.WriteLine("排序后的的列表 pets");
foreach (Pet pet in query_bei)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
}
public static void OrderByEx2()
{
Pet[] pets = { new Pet { Name="Barley", Age="4" },
new Pet { Name="Boots", Age="8" },
new Pet { Name="Whiskers", Age="1" } };
IEnumerable<Pet> query = pets.OrderByDescending(pet => pet.Age);
pets.OrderBy(pet => pet.Age);
Console.WriteLine("本身排序的数组 pets");
foreach (Pet pet in pets)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
Console.WriteLine("排序后的的列表 pets");
foreach (Pet pet in query)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
IEnumerable<Pet> query_ben = pets;
IEnumerable<Pet> query_bei = pets.OrderByDescending(pet => pet.Age);
Console.WriteLine("本身排序的列表 pets");
foreach (Pet pet in query_ben)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
Console.WriteLine("排序后的的列表 pets");
foreach (Pet pet in query_bei)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
}
}
}
运行结果