狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

在 C# 語(yǔ)言中使用 LINQ 對(duì)數(shù)據(jù)進(jìn)行篩選和排序

admin
2024年12月12日 13:35 本文熱度 633

LINQ是“語(yǔ)言集成查詢”(Language Integrated Query)的縮寫(xiě)。它使開(kāi)發(fā)人員能夠直觀且高效地與集合進(jìn)行交互。它為C#及其他.NET語(yǔ)言帶來(lái)了類(lèi)似SQL的查詢功能,讓從各種數(shù)據(jù)源(如集合、數(shù)據(jù)庫(kù)和XML文件)中篩選、排序以及操作數(shù)據(jù)變得更加容易。

在本文中,我們將更深入地探究LINQ的三個(gè)核心方法,它們分別是WhereOrderByThenBy。這些方法主要用于幫助篩選和排序數(shù)據(jù)。

LINQ簡(jiǎn)介

LINQ讓你能夠輕松查詢數(shù)據(jù),無(wú)論數(shù)據(jù)來(lái)自何處。無(wú)論你處理的是列表、數(shù)據(jù)庫(kù)還是XML文件,LINQ都使用相同的簡(jiǎn)單語(yǔ)法,該語(yǔ)法看上去與SQL非常相似。簡(jiǎn)單來(lái)說(shuō),如果你有任何數(shù)據(jù)庫(kù)查詢方面的經(jīng)驗(yàn),就能輕松學(xué)習(xí)LINQ。

LINQ的主要優(yōu)勢(shì):

  • 可讀性:LINQ查詢比傳統(tǒng)的循環(huán)或手動(dòng)構(gòu)建的查詢更具可讀性。

  • 類(lèi)型安全性:由于LINQ查詢是強(qiáng)類(lèi)型的,所以你能在編譯時(shí)捕獲許多錯(cuò)誤。

  • 通用性:LINQ可用于各種數(shù)據(jù)源,如SQL數(shù)據(jù)庫(kù)、XML、內(nèi)存中的對(duì)象等等。

使用Where進(jìn)行數(shù)據(jù)篩選

Where方法是LINQ中的一個(gè)方法,它允許我們基于某個(gè)條件或謂詞來(lái)篩選集合。它將條件應(yīng)用于集合中的每個(gè)元素,并僅返回那些符合條件的元素。

語(yǔ)法

IEnumerable<T> Where(Func<T, bool> predicate);

其中,predicate是一個(gè)表示條件的函數(shù)。它從集合中獲取一個(gè)元素,如果該元素應(yīng)包含在結(jié)果中,則返回true,否則返回false

基于簡(jiǎn)單條件進(jìn)行篩選

假設(shè)你有一個(gè)整數(shù)列表,并且想要篩選出大于5的數(shù)字。以下是使用Where方法實(shí)現(xiàn)此操作的方式:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 篩選大于5的數(shù)字
var filteredNumbers = numbers.Where(n => n > 5);

foreach (var number in filteredNumbers)
{
   Console.WriteLine(number);
}

輸出

6
7
8
9
10

在這個(gè)示例中:

  • 使用了lambda表達(dá)式n => n > 5來(lái)篩選數(shù)字。

  • 只有大于5的數(shù)字才會(huì)包含在結(jié)果中。

基于對(duì)象屬性進(jìn)行篩選

現(xiàn)在,讓我們基于特定屬性來(lái)篩選一個(gè)對(duì)象列表。假設(shè)我們有一個(gè)Person對(duì)象列表,并且想要篩選出年齡大于30歲的人員。

public class Person
{
   public string Name { get; set; }
   public int Age { get; set; }
}

List<Person> people = new List<Person>
{
   new Person { Name = "John", Age = 28 },
   new Person { Name = "Jane", Age = 35 },
   new Person { Name = "Mike", Age = 40 }
};

// 篩選年齡大于30歲的人員
var filteredPeople = people.Where(p => p.Age > 30);

foreach (var person in filteredPeople)
{
   Console.WriteLine($"{person.Name} is {person.Age} years old.");
}

輸出

Jane is 35 years old.
Mike is 40 years old.

在這種情況下:

  • 條件p.Age > 30用于檢查每個(gè)Person對(duì)象的年齡是否大于30歲。

  • 只有年齡大于30歲的人員會(huì)被返回。

使用OrderBy進(jìn)行數(shù)據(jù)排序

OrderBy方法用于根據(jù)你指定的鍵按升序?qū)?shù)據(jù)進(jìn)行排序。它通過(guò)比較集合中元素的鍵,并將它們按升序排列來(lái)實(shí)現(xiàn)排序功能。

語(yǔ)法

IOrderedEnumerable<T> OrderBy<TKey>(Func<T, TKey> keySelector);

其中,keySelector是一個(gè)定義了將依據(jù)其對(duì)集合進(jìn)行排序的鍵的函數(shù),該鍵通常是一個(gè)屬性或字段。

按升序排序

讓我們使用OrderBy方法對(duì)一個(gè)整數(shù)列表按升序進(jìn)行排序:

List<int> numbers = new List<int> { 10, 3, 7, 1, 9 };

// 按升序?qū)?shù)字進(jìn)行排序
var sortedNumbers = numbers.OrderBy(n => n);

foreach (var number in sortedNumbers)
{
   Console.WriteLine(number);
}

輸出

1
3
7
9
10

在這里,OrderBy方法根據(jù)每個(gè)元素的數(shù)值對(duì)列表按升序進(jìn)行排序。

按對(duì)象屬性排序

現(xiàn)在,讓我們按Person對(duì)象的Name屬性以字母順序?qū)σ粋€(gè)Person對(duì)象列表進(jìn)行排序:

List<Person> people = new List<Person>
{
   new Person { Name = "John", Age = 28 },
   new Person { Name = "Jane", Age = 35 },
   new Person { Name = "Mike", Age = 40 }
};

// 按姓名對(duì)人員進(jìn)行排序
var sortedPeople = people.OrderBy(p => p.Name);

foreach (var person in sortedPeople)
{
   Console.WriteLine($"{person.Name} is {person.Age} years old.");
}

輸出

Jane is 35 years old.
John is 28 years old.
Mike is 40 years old.

OrderBy方法根據(jù)Person對(duì)象的Name屬性按升序?qū)α斜磉M(jìn)行排序。

使用ThenBy進(jìn)行二級(jí)排序

在對(duì)數(shù)據(jù)進(jìn)行排序時(shí),有時(shí)你可能希望應(yīng)用多級(jí)排序。例如,你可能希望先按一個(gè)屬性(如Age)對(duì)列表進(jìn)行排序,然后在遇到兩個(gè)元素對(duì)于第一個(gè)屬性具有相同值的情況下,再按另一個(gè)屬性(如Name)進(jìn)行排序。這時(shí)ThenBy方法就派上用場(chǎng)了。

語(yǔ)法

IOrderedEnumerable<T> ThenBy<TKey>(Func<T, TKey> keySelector);

ThenBy方法在初始的OrderByOrderByDescending之后執(zhí)行二級(jí)排序。

多級(jí)排序

讓我們先按Age對(duì)Person列表進(jìn)行排序,然后再按Name排序:

List<Person> people = new List<Person>
{
   new Person { Name = "John", Age = 28 },
   new Person { Name = "Jane", Age = 35 },
   new Person { Name = "Alice", Age = 35 },
   new Person { Name = "Mike", Age = 28 }
};

// 先按年齡排序,再按姓名排序
var sortedPeople = people.OrderBy(p => p.Age).ThenBy(p => p.Name);

foreach (var person in sortedPeople)
{
   Console.WriteLine($"{person.Name}, {person.Age} years old");
}

輸出

John, 28 years old
Mike, 28 years old
Alice, 35 years old
Jane, 35 years old

解釋

  • 首先,列表按Age進(jìn)行排序。

  • 對(duì)于年齡相同的人員,會(huì)基于他們的Name應(yīng)用二級(jí)排序。

使用OrderByDescending和ThenByDescending按降序排序

當(dāng)你希望按降序?qū)?shù)據(jù)進(jìn)行排序時(shí),可以使用LINQ中的OrderByDescendingThenByDescending方法來(lái)實(shí)現(xiàn)此目的。

使用OrderByDescending按降序排序

List<int> numbers = new List<int> { 10, 3, 7, 1, 9 };

// 按降序排序
var sortedNumbersDesc = numbers.OrderByDescending(n => n);

foreach (var number in sortedNumbersDesc)
{
   Console.WriteLine(number);
}

輸出

10
9
7
3
1

使用ThenByDescending進(jìn)行二級(jí)降序排序

就像ThenBy一樣,你可以使用ThenByDescending進(jìn)行二級(jí)降序排序。例如:

var sortedPeopleDesc = people.OrderByDescending(p => p.Age).ThenByDescending(p => p.Name);

在復(fù)雜查詢中結(jié)合使用Where、OrderBy和ThenBy

在實(shí)際場(chǎng)景中,你很少單獨(dú)進(jìn)行篩選或排序操作。通常,你需要篩選一個(gè)集合以僅獲取相關(guān)項(xiàng),然后基于多個(gè)條件對(duì)篩選后的結(jié)果進(jìn)行排序。由于LINQ流暢的語(yǔ)法允許你組合多個(gè)方法,所以在LINQ中,這種篩選和排序的組合操作非常簡(jiǎn)單直接。

以下是在復(fù)雜查詢中WhereOrderByThenBy組合使用的方式示例:

var filteredAndSortedPeople = people
  .Where(p => p.Age > 30)
  .OrderBy(p => p.Age)
  .ThenBy(p => p.Name);

foreach (var person in filteredAndSortedPeople)
{
   Console.WriteLine($"{person.Name}, {person.Age} years old");
}

在這個(gè)示例中,我們首先使用Where方法篩選人員列表,僅保留年齡大于30歲的人員。然后,使用OrderBy方法按年齡升序?qū)Y選后的列表進(jìn)行排序。如果兩個(gè)人年齡相同,我們使用ThenBy方法按姓名的字母順序進(jìn)行二級(jí)排序。最后,我們輸出經(jīng)過(guò)篩選和排序后的人員列表。

LINQ為在C#中篩選和排序數(shù)據(jù)提供了一種強(qiáng)大的方式。Where方法非常適合基于條件篩選集合,而OrderByThenByOrderByDescendingThenByDescending則讓你能夠完全掌控?cái)?shù)據(jù)的排序方式。掌握這些方法將使你能夠?yàn)閿?shù)據(jù)操作編寫(xiě)簡(jiǎn)潔、可讀且高效的代碼。


該文章在 2024/12/13 9:08:36 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved