======================================================================
 JSON::LINQ Bảng Tóm Tắt                                      [VI] Tiếng Việt
======================================================================

[ 1. 1. Tạo truy vấn ]

  use JSON::LINQ;
  my $q = JSON::LINQ->FromJSON('data.json');
  my $q = JSON::LINQ->FromJSONL('events.jsonl');
  my $q = JSON::LINQ->FromJSONString('[{"id":1}]');
  my $q = JSON::LINQ->From(\@array);
  my $q = JSON::LINQ->Empty();
  my $q = JSON::LINQ->Range(1, 5);
  my $q = JSON::LINQ->Repeat('x', 3);

[ 2. 2. Lọc dữ liệu ]

  ->Where(sub { $_[0]{status} eq '200' })
  ->Where(sub { $_[0]{score} >= 80 })

[ 3. 3. Chiếu dữ liệu ]

  ->Select(sub { $_[0]{name} })
  ->SelectMany(sub { [ @{ $_[0]{tags} } ] })

[ 4. 4. Sắp xếp ]

  ->OrderBy(sub { $_[0]{name} })
  ->OrderByDescending(sub { $_[0]{score} })
  ->OrderByNum(sub { $_[0]{price} })
  ->OrderByStr(sub { $_[0]{code} })
  ->ThenBy(sub { $_[0]{name} })
  ->Reverse()

[ 5. 5. Phân trang ]

  ->Skip(10)  ->Take(5)
  ->SkipWhile(sub { ... })  ->TakeWhile(sub { ... })

[ 6. 6. Nhóm dữ liệu ]

  my @g = $q->GroupBy(sub { $_[0]{cat} })->ToArray();
  my $l = $q->ToLookup(sub { $_[0]{dept} });

[ 7. 7. Tổng hợp (phương thức đầu cuối) ]

  ->Count()  ->Sum(sub { $_[0]{v} })  ->Average(sub { ... })
  ->Min(sub { ... })  ->Max(sub { ... })
  ->First()  ->FirstOrDefault()
  ->Last()   ->LastOrDefault()
  ->Any()    ->All(sub { ... })
  ->ForEach(sub { ... })  ->Aggregate($s, sub { ... })

[ 8. 8. Phép toán tập hợp ]

  ->Distinct()  ->Union($q2)  ->Intersect($q2)  ->Except($q2)
  ->SequenceEqual($q2)

[ 9. 9. Chuyển đổi ]

  ->ToJSON('out.json')   ->ToJSONL('out.jsonl')
  ->ToArray()  ->ToDictionary(sub { ... })  ->ToLookup(sub { ... })

[ 10. 10. Giá trị Boolean ]

  JSON::LINQ::true   # 1 / "true"
  JSON::LINQ::false  # 0 / "false"

[ 11. 11. Kết nối ]

  $outer->Join($inner, sub{$_[0]{k}}, sub{$_[0]{k}}, sub{...})
  $outer->GroupJoin($inner, sub{...}, sub{...}, sub{...})

[ 12. 12. Các phương thức khác ]

  ->Concat($q2)  ->Zip($q2, sub{...})  ->DefaultIfEmpty($d)

[ 13. 13. Liên kết tham khảo ]

  JSON::LINQ: https://metacpan.org/dist/JSON-LINQ
  JSONL:      https://jsonlines.org/
  LINQ:       https://docs.microsoft.com/dotnet/api/system.linq

======================================================================
