Sự Khác Nhau Giữa Ienumerable Và Iqueryable Là Gì, Linq Trong Lập Trình C#

Các toán tử chuyển đổi trong LINQ rất hữu ích trong việc chuyển đổi kiểu dữ liệu của phần tử trong một danh sách.

Có ba loại toán tử chuyển đổi:

Bạn đang xem: Sự Khác Nhau Giữa Ienumerable Và Iqueryable Là Gì, Linq Trong Lập Trình C#

Toán tử As (AsEnumerable và AsQueryable).Toán tử To (ToArray, ToDipedia, ToList và ToLookup).Toán tử Casting (Cast và OfType).

Bảng sau liệt kê tất cả các toán tử chuyển đổi.


Phương thứcMô tả
AsEnumerableTrả về tập hợp đầu vào dưới dạng IEnumerable
AsQueryableChuyển đổi từ IEnumerable sang IQueryable, để mô phỏng nhà cung cấp truy vấn từ xa
CastChuyển đổi tập hợp non-generic sang tập hợp generic (IEnumerable to IEnumerable)
OfTypeLọc một tập hợp dựa trên một kiểu dữ liệu được chỉ định
ToArrayChuyển đổi một tập hợp thành một mảng
ToDictionary Đưa các phần tử vào Dictionary dựa trên chức năng chọn khóa.
ToListChuyển đổi tập hợp thành Danh sách
ToLookupNhóm các thành phần vào Lookup

Toán tử chuyển đổi là một trong những toán tử truy vấn chuẩn của LINQ.


Toán tử truy vấn chuẩn của LINQ | 90namdangbothanhhoa.vn
Các toán tử truy vấn chuẩn trong LINQ là các phương thức mở rộng cho các kiểu IEnumerable và IQueryable.
*
Trung Nguyen90namdangbothanhhoa.vn
*

Phương thức AsEnumerable trong LINQ

Phương thức AsEnumerable ép kiểu một đối tượng nguồn thành kiểu IEnumerable.

class Program{ static void ReportTypeProperties(T obj) { Console.WriteLine("Compile-time type: {0}", typeof(T).Name); Console.WriteLine("Actual type: {0}", obj.GetType().Name); } static void Main(string args) { Student studentArray = { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 4, StudentName = "Ram", Age = 20 }, new Student() { StudentID = 5, StudentName = "Ron", Age = 31 } }; ReportTypeProperties(studentArray); ReportTypeProperties(studentArray.AsEnumerable()); }}Đây là kết quả khi biên dịch và thực thi chương trình:

Compile-time type: StudentActual type: StudentCompile-time type: IEnumerable`1Actual type: StudentLưu ý: Phương thức AsEnumerable không hỗ trợ cú pháp truy vấn LINQ.

Phương thức AsQueryable trong LINQ

Phương thức AsQueryable chuyển đổi một đối tượng nguồn thành kiểu IQueryable.

class Program{ static void ReportTypeProperties(T obj) { Console.WriteLine("Compile-time type: {0}", typeof(T).Name); Console.WriteLine("Actual type: {0}", obj.GetType().Name); } static void Main(string args) { Student studentArray = { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 4, StudentName = "Ram", Age = 20 }, new Student() { StudentID = 5, StudentName = "Ron", Age = 31 } }; ReportTypeProperties(studentArray); ReportTypeProperties(studentArray.AsQueryable()); }}Đây là kết quả khi biên dịch và thực thi chương trình:

Compile-time type: StudentActual type: StudentCompile-time type: IQueryable`1Actual type: EnumerableQuery`1Lưu ý: Phương thức AsQueryable không hỗ trợ cú pháp truy vấn LINQ.

Phương thức Cast trong LINQ

Phương thức Cast thực hiện điều tương tự như phương thức AsEnumerable. Nó ép kiểu một đối tượng nguồn thành kiểu IEnumerabl.

class Program{ static void ReportTypeProperties(T obj) { Console.WriteLine("Compile-time type: {0}", typeof(T).Name); Console.WriteLine("Actual type: {0}", obj.GetType().Name); } static void Main(string args) { Student studentArray = { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 4, StudentName = "Ram", Age = 20 }, new Student() { StudentID = 5, StudentName = "Ron", Age = 31 } }; ReportTypeProperties(studentArray); ReportTypeProperties(studentArray.Cast()); }}Đây là kết quả khi biên dịch và thực thi chương trình:

Compile-time type: StudentActual type: StudentCompile-time type: IEnumerable`1Actual type: StudentstudentArray.Cast() giống như (IEnumerable)studentArray. Nhưng Cast() ngắn gọn và dễ đọc hơn.

Lưu ý: Phương thức Cast không hỗ trợ cú pháp truy vấn LINQ.

Phương thức ToArray trong LINQ

Phương thức ToArray chuyển đổi một đối tượng nguồn thành kiểu mảng. ToArray là một toán tử To.

Xem thêm: cô dâu bùi thị xuân hồng là ai

Toán tử To bắt buộc thực hiện các truy vấn. Nó buộc trình cung cấp truy vấn từ xa (remote query provider) thực hiện truy vấn và nhận kết quả từ nguồn dữ liệu - ví dụ: cơ sở dữ liệu SQL Server.

Ví dụ minh họa phương thức ToArray với tập hợp có kiểu dữ liệu nguyên thủy:

IList strList = new List() { "Two", "One", "Three", "Four", "Three" };Console.WriteLine("strList type: {0}", strList.GetType().Name);string strArray = strList.ToArray();// converts List to ArrayConsole.WriteLine("strArray type: {0}", strArray.GetType().Name);Đây là kết quả khi biên dịch và thực thi chương trình:

strList type: List`1strArray type: StringLưu ý: Phương thức ToArray không hỗ trợ cú pháp truy vấn LINQ.

Phương thức ToList trong LINQ

Phương thức ToList chuyển đổi một đối tượng nguồn thành kiểu List. ToList là một toán tử To.

Toán tử To bắt buộc thực hiện các truy vấn. Nó buộc trình cung cấp truy vấn từ xa (remote query provider) thực hiện truy vấn và nhận kết quả từ nguồn dữ liệu - ví dụ: cơ sở dữ liệu SQL Server.

Ví dụ minh họa phương thức ToList với tập hợp có kiểu dữ liệu nguyên thủy:

IList strList = new List() { "Two", "One", "Three", "Four", "Three" };Console.WriteLine("strList type: {0}", strList.GetType().Name);IList newList = strArray.ToList(); // converts array into listConsole.WriteLine("newList type: {0}", newList.GetType().Name);Đây là kết quả khi biên dịch và thực thi chương trình:

strList type: List`1newList type: List`1Lưu ý: Phương thức ToList không hỗ trợ cú pháp truy vấn LINQ.

Phương thức ToDictionary trong LINQ

Phương thức ToDictionary chuyển đổi một đối tượng nguồn thành kiểu Dictionary. ToDictionary là một toán tử To.

Toán tử To bắt buộc thực hiện các truy vấn. Nó buộc trình cung cấp truy vấn từ xa (remote query provider) thực hiện truy vấn và nhận kết quả từ nguồn dữ liệu - ví dụ: cơ sở dữ liệu SQL Server.

Xem thêm: thần nông là ai

Ví dụ minh họa phương thức ToDictionary với tập hợp có kiểu dữ liệu nguyên thủy:

IList studentList = new List() { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 18 }, new Student() { StudentID = 4, StudentName = "Ram", Age = 21 }, new Student() { StudentID = 5, StudentName = "Ron", Age = 21 } };//following converts list into dictionary where StudentId is a keyvar studentDict = studentList.ToDictionary(s => s.StudentID); foreach(var item in studentDict){ Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value.StudentName);}Đây là kết quả khi biên dịch và thực thi chương trình:

Key: 1, Value: JohnKey: 2, Value: SteveKey: 3, Value: BillKey: 4, Value: RamKey: 5, Value: RonHình dưới đây cho thấy studentDict trong ví dụ trên chứa cặp khóa-giá trị, trong đó khóa là StudentID và giá trị là đối tượng Student.