Bài viết mới

[C#] LINQ trong CSharp - Phần hai

[C#] LINQ trong CSharp - Phần hai
Đăng bởi: TONA - Lượt xem: 589 20:35:14, 03/04/2017CSHARP   In bài viết

Tiếp theo của phần một - LINQ la gi ? - trong phần này sẽ giới thiệu các phương thức: Grouping, Set, Conversion (import) và Conversion (export).

  1. Ordering LINQ (sắp xếp):
  • OrderByDescending: Sắp xếp các element theo thứ tự giảm dần theo khóa khai báo.
  • ThenBy: Sắp xếp các element theo thứ tự tăng dần theo khóa khai báo, sau khi sắp xếp theo khóa trước đó.
var query = dsSach.OrderBy(x => x.MaChuDe).ThenBy(x => x.TenSach);
  • ThenByDescending: Sắp xếp các element theo thứ tự giảm dần theo khóa khai báo, sau khi sắp xếp theo khóa trước đó.
  • Reverse: Đảo ngược thứ tự sắp xếp các element trong sequence.
var query = dsSo.OrderBy(x => x).Reverse();
  1. Grouping LINQ (Nhóm):
  • GroupBy: Nhóm các element theo một bộ khóa cụ thể:
var query = dsSach.GroupBy(x => x.MaChuDe)
.Select(x => new { x.Key, sosp = x.Count() });
//Cho biết số lượng sách của từng Chủ đề, gồm: Mã chủ đề, tên chủ đề, Số lượng
var query = dsSach.GroupBy(x => new { x.MaChuDe, x.ChuDe.TenChuDe })
.OrderBy(x => x.Key.MaChuDe)
.Select(x => new { x.Key.MaChuDe, x.Key.TenChuDe, soluong = x.Count() });
  1. Set LINQ (tập hợp):
  • Concat: Nối 2 sequence lại. Phương thức này tương đương với UNION ALL trong SQL.
//Nối 2 chuỗi dsChuoi1 với dschuoi
List<string> dsChuoi1 = new List<string>(){"Đã mang lấy nghiệp vào thân","Cũng đừng trách lẫn trời gần trời xa."};
var query = dsChuoi1.Concat(dsChuoi);
  • Union: Hội kết quả của 2 sequence và loại bỏ các element trùng lắp. P.thức này tương đương với UNION trong SQL.
//trả về kết quả chứa các số duy nhất của hai mảng
int[] dsSo2 = { 0, 2, 4, 5, 6, 8, 9 };
var query = dsSo.Union(dsSo2);
  • Intersect: Hội kết quả của 2 sequence và chỉ lấy các element trùng lắp. Phương thức này tương đương với WHERE ... IN ... trong SQL.
//trả về kết quả chứa các số giống nhau của hai mảng
int[] dsSo2 = { 0, 2, 4, 5, 6, 8, 9 };
var query = dsSo.Intersect(dsSo2);
  • Except: Hội kết quả của 2 sequence và chỉ lấy các element nào của sequence thứ nhất mà không có trong sequence thứ 2. Phươngthức này tương đương với EXCEPT hoặc WHERE ... NOT IN ... trong SQL.
//trả về kết quả chứa các số của mảng dsSo2 mà không có trong dsSo
int[] dsSo2 = { 0, 2, 4, 5, 6, 8, 9 };
var query = dsSo2.Except(dsSo);
  1. Conversion LINQ (import):
  • OfType: Lọc các element kiểu IEnumerable thỏa điều kiện kiểu xác định. Nói cách khác là chuyển kiểu IEnumerable sang IEnumerable<T> và sẽ không chuyển các element khác kiểu T
//Lọc các element có kiểu string
ArrayList ds = new ArrayList()
{
"Mango","Orange","Apple",3.0, "Banana", true, 100
};
IEnumerable<string> query = ds.OfType<string>();
  • Cast: Chuyển kiểu các element kiểu IEnumerable sang kiểu xác định, tuy nhiên nó sẽ báo lỗi nếu không chuyển được vì có element sai kiểu.
//nếu dùng lại ví dụ trên
IEnumerable<string> query = ds.Cast<string>(); //Lỗi run-time
//nhưng nếu khai báo lại nguồn dữ liệu như sau thì sẽ không còn lỗi
ArrayList ds = new ArrayList()
{
"Mango","Orange","Apple", "Banana"
};
  1. Conversion LINQ (Export):
  • ToArray: Tạo ra một mảng từ một IEnumerable<T>.
//tạo một mảng từ kiểu List<Sach>
var query = dssp.ToArray(); //Vừa tạo, vừa thi hành truy vấn
  • ToList: Tạo ra một List<T> từ một IEnumerable<T>.
Sanpham[] dssp ={new Sanpham { Tensp = "Xà lách", Nhomsp="Rau cải" },new Sanpham { Tensp = "Cua biển", Nhomsp="Hải sản" },
new Sanpham { Tensp = "Đậu xanh", Nhomsp="Ngũ cốc" } ,new Sanpham { Tensp = "Tôm càng", Nhomsp="Hải sản" }
};
//tạo một List<Sanpham> từ kiểu mảng Sanpham
var query = dssp.ToList();
//tạo một List<string> từ kiểu mảng Sanpham
var query = dssp.Select(x => x.Tensp).ToList();
  • ToDictionary: Tạo ra một Dictionary<TKey, TValue> từ một IEnumerable<T> dựa theo một bộkhóa xác định:
//tạo một Dictionary<string, int> từ kiểu mảng
var spApple = (new[]{ new {Ten="iPhone",Dg=17}, new {Ten="iPad",Dg=10},new {Ten="iPod",Dg=2}, new {Ten="Mac laptop",Dg=25},
}).ToDictionary(x => x.Ten); //lấy Ten làm khóa, do đó nếu có giá trị trùng nhau thì sẽ bị lỗi run-time
  • ToLookup: Tạo ra một Lookup<TKey, TElement> từ một IEnumerable<T> dựa theo một bộ khóa xác định. Điểm khác nhau so với ToDictionary là cho phép trùng Key:
List<Sanpham> dssp = new List<Sanpham>
{new Sanpham { Tensp = "Xà lách", Nhomsp="Rau cải" },new Sanpham { Tensp = "Cua biển", Nhomsp="Hải sản" },new Sanpham { Tensp = "Đậu xanh", Nhomsp="Ngũ cốc" } ,new Sanpham { Tensp = "Tôm càng", Nhomsp="Hải sản" }
};
//câu lệnh sẽ bị lỗi lúc run-time vì trùng khóa
var query = dssp.ToDictionary(x => x.Nhomsp);
//Dòng lệnh này sẽ không bị lỗi
var query = dssp.ToLookup(x => x.Nhomsp);
Ví dụ khác: Nhóm theo ký tự đầu tiên của thuộc tính Nhomsp
//Cũng có thể dùng ILookup và nhóm các element lại:
ILookup<char, string> query = dssp.ToLookup(k => Convert.ToChar( k.Nhomsp.Substring(0,1)), v => v.Tensp);
StringBuilder stb = new StringBuilder();
//Khi thi hành truy vấn, dùng kiểu IGrouping<char, string>
foreach (IGrouping<char, string> q in query)
{
stb.AppendLine(q.Key.ToString());
foreach(string str in q )
stb.AppendLine(" " +str);
}
  • AsEnumerable: Trả về input có kiểu IEnumerable<T>.
IEnumerable<string> query = dsChuoi.AsEnumerable().Where(x => x == "chữ");
  • AsQueryable : Chuyển kiểu IEnumerable<T> sang kiểu IQueryable<T>.
IQueryable<string> query = dsChuoi.AsQueryable().Where(x => x == "chữ");

Xem tiếp Phần ba !

HAPPY CODING :))

[C#] LINQ trong CSharp - Phần hai
Đăng bởi: TONA - Lượt xem: 589 20:35:14, 03/04/2017CSHARP   In bài viết

THẢO LUẬN BÀI VIẾT

BÀN XẾP GỌN THÔNG MINH 4 IN 1

bàn xếp gọn thông minh 4 in 1

PHẦN MỀM LẤY TIN BẤT ĐỘNG SẢN

phần mềm lấy tin tự động bất động sản

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp

PHẦN MỀM LẤY TIN BẤT ĐỘNG SẢN

phần mềm lấy tin tự động bất động sản
.