开放的编程资料库

当前位置:我爱分享网 > C#教程 > 正文

C# LINQ 命令

在本文中,我们展示了如何使用LINQ查询在C#中对数据进行排序。

语言集成查询(LINQ)是一种特定领域的语言,用于从各种数据源(包括数组、列表、XML文件或数据库)查询数据。

我们可以使用LINQ的OrderOrderDescendingOrderByOrderByDescending方法对数据进行排序。方法不改变原始序列;他们返回一个新的排序序列。

此外,我们可以在LINQ查询表达式中使用orderbyascendingdescending子句。

C#LINQ命令

Order方法按升序对序列的元素进行排序。

Order<T>(IEnumerable<T>)
Order<T>(IEnumerable<T>, IComparer<T>)

第二种方法接受一个IComparer

var words = new List<string> {
    "world", "War", "abbot", "Caesar", "castle", "sky", "den",
    "forest", "ocean", "water", "falcon", "owl", "rain", "Earth"
};

var sorted = words.Order().ToList();
sorted.ForEach(w => Console.WriteLine(w));

Console.WriteLine("-------------------------");

var sorted2 = words.Order(StringComparer.Ordinal).ToList();
sorted2.ForEach(w => Console.WriteLine(w));

我们有一个单词列表。我们按升序对单词进行排序。

var sorted = words.Order().ToList();
sorted.ForEach(w => Console.WriteLine(w));

我们使用Order对单词进行排序,并将排序后的结果打印到控制台。单词以不区分大小写的方式排序。

var sorted2 = words.Order(StringComparer.Ordinal).ToList();
sorted2.ForEach(w => Console.WriteLine(w));

我们还向重载方法传递了一个字符串比较器。StringComparer.Ordinal使单词以区分大小写的方式排序。

$ dotnet run
abbot
Caesar
castle
den
Earth
falcon
forest
ocean
owl
rain
sky
War
water
world
-------------------------
Caesar
Earth
War
abbot
castle
den
falcon
forest
ocean
owl
rain
sky
water
world

C#LINQOrderDescending

OrderDescending方法按降序对序列中的元素进行排序。

var vals = new List<int> { 0, -2, 1, -3, 4, 3, 2, 5, 7, -1 }; 

var sorted = vals.OrderDescending();
Console.WriteLine(string.Join(", ", sorted));

在程序中,我们按降序对整数进行排序。

$ dotnet run
7, 5, 4, 3, 2, 1, 0, -1, -2, -3

C#LINQOrderBy

OrderBy方法根据键按升序对序列的元素进行排序。

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

该方法接受一个keyselector函数,该函数从一个元素中提取一个键。

var users = new List<User>
{
    new ("John", "Doe", 1230),
    new ("Lucy", "Novak", 670),
    new ("Ben", "Walter", 2050),
    new ("Robin", "Brown", 2300),
    new ("Amy", "Doe", 1250),
    new ("Joe", "Draker", 1190),
    new ("Janet", "Doe", 980),
    new ("Albert", "Novak", 1930),
};

Console.WriteLine("sort ascending by last name and salary");

var sortedUsers = users.OrderBy(u => u.LastName).ThenBy(u => u.Salary);

foreach (var user in sortedUsers)
{
    Console.WriteLine(user);
}

record User(string FirstName, string LastName, int Salary);

在示例中,我们首先按姓氏对用户进行排序,然后按工资排序。

var sortedUsers = users.OrderBy(u => u.LastName).ThenBy(u => u.Salary);

我们按姓氏对用户进行排序,然后按工资升序对用户进行排序。lambda形式的keyselector函数提取LastName属性作为排序键。

$ dotnet run
sort ascending by last name and salary
User { FirstName = Robin, LastName = Brown, Salary = 2300 }
User { FirstName = Janet, LastName = Doe, Salary = 980 }
User { FirstName = John, LastName = Doe, Salary = 1230 }
User { FirstName = Amy, LastName = Doe, Salary = 1250 }
User { FirstName = Joe, LastName = Draker, Salary = 1190 }
User { FirstName = Lucy, LastName = Novak, Salary = 670 }
User { FirstName = Albert, LastName = Novak, Salary = 1930 }
User { FirstName = Ben, LastName = Walter, Salary = 2050 }

C#LINQOrderByDescending

OrderByDescending方法按降序对序列中的元素进行排序。

var users = new List<User>
{
    new ("John", "Doe", 1230),
    new ("Lucy", "Novak", 670),
    new ("Ben", "Walter", 2050),
    new ("Robin", "Brown", 2300),
    new ("Amy", "Doe", 1250),
    new ("Joe", "Draker", 1190),
    new ("Janet", "Doe", 980),
    new ("Albert", "Novak", 1930),
};

Console.WriteLine("sort descending by last name and salary");

var sortedUsers = users.OrderByDescending(u => u.LastName)
    .ThenByDescending(u => u.Salary);

foreach (var user in sortedUsers)
{
    Console.WriteLine(user);
}

record User(string FirstName, string LastName, int Salary);

在程序中,我们先按姓氏对用户进行排序,然后按薪水降序排列。

$ dotnet run
sort descending by last name and salary
User { FirstName = Ben, LastName = Walter, Salary = 2050 }
User { FirstName = Albert, LastName = Novak, Salary = 1930 }
User { FirstName = Lucy, LastName = Novak, Salary = 670 }
User { FirstName = Joe, LastName = Draker, Salary = 1190 }
User { FirstName = Amy, LastName = Doe, Salary = 1250 }
User { FirstName = John, LastName = Doe, Salary = 1230 }
User { FirstName = Janet, LastName = Doe, Salary = 980 }
User { FirstName = Robin, LastName = Brown, Salary = 2300 }

用查询表达式排序

下一个示例使用LINQ查询表达式对数据进行排序。

var words = new List<string> {
    "world", "War", "abbot", "Caesar", "castle", "sky", "den",
    "forest", "ocean", "water", "falcon", "owl", "rain", "Earth"
};

var sorted = from word in words
             orderby word
             select word;

Console.WriteLine(string.Join(", ", sorted));

var sorted2 = from word in words
             orderby word descending
             select word;

Console.WriteLine(string.Join(", ", sorted2));

我们使用orderbydescending子句对单词列表进行排序。

$ dotnet run
abbot, Caesar, castle, den, Earth, falcon, forest, ocean, owl, rain, sky, War, water, world
world, water, War, sky, rain, owl, ocean, forest, falcon, Earth, den, castle, Caesar, abbot

在本文中,我们使用LINQ在C#中对数据进行了排序。

列出所有C#教程。

未经允许不得转载:我爱分享网 » C# LINQ 命令

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏