目錄
一、概述
二、Where
三、Select
四、GroupBy
五、First / FirstOrDefault
六、Last / LastOrDefault
C# Linq 文檔(一)
1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault
C# Linq 文檔(二)
1.OrderBy,?2.OrderByDescending,3.Skip,4.Take,5.Any,6.All
C# Linq 文檔(三)
1.Sum / Min / Max / Average,2.Distinct,3.Concat,4.Join,5.ToList ,6.ToArray,7.ToDictionary
C# Linq 文檔(四)
1.SelectMany,2.Aggregate,3.DistinctBy,4.Reverse,5.SequenceEqual,6.Zip,7.SkipWhile ,8.TakeWhile
C# Linq 文檔(二)_熊思宇的博客-CSDN博客
C# Linq 文檔(三)_熊思宇的博客-CSDN博客
C# Linq 文檔(四)_熊思宇的博客-CSDN博客
一、概述
語言集成查詢 (LINQ) 是一系列直接將查詢功能集成到 C# 語言的技術(shù)統(tǒng)稱。 數(shù)據(jù)查詢歷來都表示為簡單的字符串,沒有編譯時(shí)類型檢查或 IntelliSense 支持。 此外,需要針對每種類型的數(shù)據(jù)源了解不同的查詢語言:SQL 數(shù)據(jù)庫、XML 文檔、各種 Web 服務(wù)等。 借助 LINQ,查詢成為了最高級的語言構(gòu)造,就像類、方法和事件一樣。
對于編寫查詢的開發(fā)者來說,LINQ 最明顯的“語言集成”部分就是查詢表達(dá)式。 查詢表達(dá)式采用聲明性查詢語法編寫而成。 使用查詢語法,可以用最少的代碼對數(shù)據(jù)源執(zhí)行篩選、排序和分組操作。 可使用相同的基本查詢表達(dá)式模式來查詢和轉(zhuǎn)換 SQL 數(shù)據(jù)庫、ADO .NET 數(shù)據(jù)集、XML 文檔和流以及 .NET 集合中的數(shù)據(jù)。
二、Where
Where 是 LINQ 的一個(gè)操作符,用于篩選滿足指定條件的元素。
說白了就是查找元素,這個(gè)在 C# 的開發(fā)中也是比較常用的,下面看一個(gè)例子
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
IEnumerable<int> collect = numList.Where(x => x > 20);
foreach (int num in collect)
{
Console.WriteLine(num);
}
Console.ReadKey();
}
}
}
運(yùn)行:
在 where 中,x 所代表的就是?numList 中的每一個(gè)元素,Where(x => x > 20) 所指的就是遍歷 numList 每一個(gè)元素,如果它大于20,那么就添加到?IEnumerable<int> 中,一般情況下,為了讓代碼更優(yōu)雅些,IEnumerable<int> 可以不寫,直接用 var 代替,當(dāng)然,你也可以寫的更清楚一些,這都是沒關(guān)系的。
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
var collect = numList.Where(x => x > 20);
foreach (int num in collect)
{
Console.WriteLine(num);
}
Console.ReadKey();
}
}
}
另外,在 Where 后面可以繼續(xù)寫其他的條件也是沒問題的,因?yàn)楫?dāng)前的類型本來就是?IEnumerable 類型,它和 List 等數(shù)據(jù)結(jié)構(gòu)是一樣的,都可以使用 Linq 繼續(xù)操作,下面就是在? Where 后面又加了一個(gè) Where,這么寫也是不會(huì)報(bào)錯(cuò)的,但是不建議這么寫,最好是在后面加其他的查詢條件,比如?Select
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
var collect = numList.Where(x => x > 20).Where(x => x > 30);
foreach (int num in collect)
{
Console.WriteLine(num);
}
Console.ReadKey();
}
}
}
運(yùn)行:
在 Where 的判斷條件中,你就當(dāng)它和 if 中的判斷條件一樣寫,多寫幾個(gè)判斷條件也是可以的
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
var collect = numList.Where(x => x > 10 && x < 90);
foreach (int num in collect)
{
Console.WriteLine(num);
}
Console.ReadKey();
}
}
}
運(yùn)行:
有人可能會(huì)問:“不對啊,我在網(wǎng)上查資料中,和你寫的不一樣,他們寫的有?from, in?等關(guān)鍵字,你這為啥沒有啊,你這 Linq 是不是搞錯(cuò)了”?沒搞錯(cuò)哈,這都是正常的,比如下面的代碼,雖然寫法不一樣,但效果是一樣的,我更推薦使用上面的寫法,更容易理解,閱讀起來也更加方便。
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
//var collect = numList.Where(x => x > 10 && x < 90);
var collect = from x in numList where x > 10 && x < 90 select x;
foreach (int num in collect)
{
Console.WriteLine(num);
}
Console.ReadKey();
}
}
}
運(yùn)行:
三、Select
Select 是 LINQ 的一個(gè)操作符,用于對序列中的每個(gè)元素進(jìn)行轉(zhuǎn)換或投影操作,并返回一個(gè)新的序列。
使用 Select 可以對數(shù)組中的每個(gè)元素進(jìn)行轉(zhuǎn)換,或者計(jì)算,下面用一個(gè)簡單的例子,將數(shù)組中每個(gè)元素 + 1
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
var collect = numList.Select(x => x + 1);
foreach (var x in collect)
{
Console.WriteLine(x);
}
Console.ReadKey();
}
}
}
運(yùn)行:
同樣的,在?Select 執(zhí)行結(jié)束后,依然可以添加其他的 Linq 操作,這個(gè)在 Linq 查詢中基本都是一樣的,后面就不再贅述了。
四、GroupBy
Linq GroupBy 方法用于按照指定的鍵對集合進(jìn)行分組,它返回一個(gè)根據(jù)指定鍵進(jìn)行分組的結(jié)果集。
先看一段代碼,演示?GroupBy 方法 是如何進(jìn)行分組的
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<People> peopleList = new List<People>()
{
new People(){Name="張三", Age=12, Career="學(xué)生" },
new People(){Name="柱子", Age=25, Career="農(nóng)民" },
new People(){Name="鐵蛋", Age=23, Career="農(nóng)民" },
new People(){Name="狗剩", Age=34, Career="職員" },
new People(){Name="二狗", Age=28, Career="職員" },
};
var collect = peopleList.GroupBy(x=> x.Career == "職員");
foreach (var group in collect)
{
Console.WriteLine("Grade {0}:", group.Key);
foreach (var people in group)
{
Console.WriteLine(people.Name);
}
}
Console.ReadKey();
}
}
class People
{
public string Name { get; set; }
public int Age { get; set; }
public string Career { get; set; }
}
}
結(jié)果:?
運(yùn)行后可以看到,返回的是兩組數(shù)據(jù),grade 等于 false 是不滿足條件的數(shù)據(jù),也一并返回了
grade 等于 true 的正是我們想要的數(shù)據(jù)
五、First / FirstOrDefault
First 方法用于返回集合中的第一個(gè)元素。如果集合為空,則會(huì)引發(fā)一個(gè)異常。如果你想要安全地獲取第一個(gè)元素,可以使用 FirstOrDefault 方法,它會(huì)返回默認(rèn)值(null或0,具體取決于元素類型)而不是引發(fā)異常。
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
int firstNumber = numList.First();
Console.WriteLine("第一個(gè)元素:{0}", firstNumber);
int defaultNumber = numList.FirstOrDefault();
Console.WriteLine("第一個(gè)元素:{0}", defaultNumber);
int[] emptyNumbers = { };
int firstOrDefaultNumber = emptyNumbers.FirstOrDefault();
Console.WriteLine("第一個(gè)元素:{0}", firstOrDefaultNumber);
Console.ReadKey();
}
}
}
運(yùn)行:
六、Last / LastOrDefault
Last 方法用于返回集合中的最后一個(gè)元素。如果集合為空,則會(huì)引發(fā)一個(gè)異常。如果你想要安全地獲取最后一個(gè)元素,可以使用 LastOrDefault 方法,它會(huì)返回默認(rèn)值(null或0,具體取決于元素類型)而不是引發(fā)異常。
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqTest
{
internal class Program
{
static void Main(string[] args)
{
List<int> numList = new List<int> { 1, 4, 5, 24, 43, 67, 12, 90, 15 };
int firstNumber = numList.Last();
Console.WriteLine("最后一個(gè)元素:{0}", firstNumber);
int defaultNumber = numList.LastOrDefault();
Console.WriteLine("最后一個(gè)元素:{0}", defaultNumber);
int[] emptyNumbers = { };
int firstOrDefaultNumber = emptyNumbers.LastOrDefault();
Console.WriteLine("最后一個(gè)元素:{0}", firstOrDefaultNumber);
Console.ReadKey();
}
}
}
運(yùn)行:
文章來源:http://www.zghlxwxcb.cn/news/detail-570677.html
end文章來源地址http://www.zghlxwxcb.cn/news/detail-570677.html
到了這里,關(guān)于C# Linq 詳解一的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!