var result = from c in Customers where c.City == "Boston" orderby c.LastName descending select new { c.FirstName, c.LastName, c.Address };
Isitilah-istilah yang digunakan pada baris kode di atas dapat dilihat pada gambar di bawah ini :
Tentunya penulisan baris-baris kode di atas sangat asing bagi kita yang belum pernah atau baru menggunakan Visual C# 3.0 / Visual Studio 2008. Ya, memang istilah-istilah di atas adalah fitur-fitur baru yang ditambahkan pada Visual C# 3.0 dan cara penulisan baris-baris kode seperti diatas digunakan dalam sintax query linq. Oleh karena itu, sebelum membahas lebih jauh mengenai LINQ ini, maka terlebih dahulu akan kita bahas fitur-fitur baru tersebut.
Automatic PropertiesDalam membuat class beserta properti-propertinya, kita biasa menuliskan dengan cara seperti di bawah ini :
Namun pada C# 3.0 untuk membuat class seperti di atas, kita dapat melakukan penulisan kode yang lebih singkat :public class Point{private int _x;public int X{get { return _x; }set { _x = value; }}private int _y;public int Y{get { return _y; }set { _y = value; }}}
public class Point{public int X { get; set; }public int Y { get; set; }}
Penulisan kode di atas adalah memungkinkan, karena terdapat fitur Automatic Properties pada C# 3.0 yang akan men-generate private field ketika melakukan operasi get/set.
Implicity Typed Local VariableDengan fitur ini, kita tidak perlu menyebutkan lagi tipe data variabel yang dideklarasikan, dengan syarat saat deklarasi variabel tersebut harus langsung diisi dengan nilai. Compiler C# akan secara otomatis mendeteksi dan menentukan tipe data variabel tersebut. Perhatikan baris kode berikut :
Pada C# 3.0, baris kode di atas bisa ditulis :int i = 5; string s = "Hello"; double d = 1.0; int[] numbers = new int[] {1, 2, 3}; Dictionary<int,Order> orders = new Dictionary<int,Order>();
Bagaimana ?, kita tidak perlu mendeklarasikan tipe datanya lagi kan ?. Namun, kita tidak boleh mendeklarasikan variabel seperti ini :var i = 5; var s = "Hello"; var d = 1.0; var numbers = new int[] {1, 2, 3}; var orders = new Dictionary<int,Order>();
Kita juga dapat menerapkan Implicity Typed Local Variable pada statemen for, yang dikenal dengan for-initializer seperti contoh berikut :var x; // Error, no initializer to infer type from var y = {1, 2, 3}; // Error, collection initializer not permitted var z = null; // Error, null type not permitted var u = x => x + 1; // Error, lambda expressions do not have a type var v = v++; // Error, initializer cannot refer to variable itself
int[] numbers = { 1, 3, 5, 7, 9 }; foreach (var n in numbers) Console.WriteLine(n);
Catatan :
Deklarasi dari Typed Local Variable hanya dapat digunakan untuk :
- local-variable-declaration
- resource-acquisition (using statement)
- for-initializer
- foreach-statement
Object & Collection InitializersBuat project baru (misalnya Initializers), kemudian di dalamnya tambahkan sebuah class (misalnya kita beri nama ObjectInitializers) :
Sekarang kita akan mencoba fitur Object Initializers, tuliskan kode program berikut di dalam class utama (Program.cs) :public class ObjectInitializer { int x, y; public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } }
Yang kedua, kita akan mencoba Collection Initializer. Dengan fitur ini kita dapat langsung menuliskan kode seperti berikut (tulis di class Program.cs) :using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Initializers { class Program { static void Main(string[] args) { //Sebuah instance dari class ObjectInitializers, //dapat diciptakan dan di diinisialisasi seperti berikut var a = new ObjectInitializers { X = 0, Y = 1 }; //Dahulu kita menggunakan cara berikut var _a = new ObjectInitializers(); _a.X = 0; _a.Y = 1; var b = _a; //Tampilkan hasilnya ke layar konsol Console.WriteLine("Nilai a = " + a.X.ToString()); Console.WriteLine("Nilai a = " + a.Y.ToString()); Console.WriteLine("\nNilai b = " + b.X.ToString()); Console.WriteLine("Nilai b = " + b.Y.ToString()); Console.WriteLine("\nTekan Enter untuk keluar..."); Console.ReadLine(); } } }
List<Point> points = new List<Point>{new Point { X = 2, Y = 5 },new Point { X = 1, Y = -10 },new Point { X = 3, Y = 0 }};
Extensions MethodsExtension Methods dideklarasikan dengan cara menentukan keyword this sebagai sebuah modifier pada parameter pertama dari method. Extension Methods hanya dapat dideklarasikan di dalam class-class static non-generic, non-nested.
Buat project baru bertipe console application, kemudian di dalamnya buat class baru dengan nama Extension.cs :
Pada class utama (Program.cs), kita uji Extension Methods yang sudah kita buat :using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace contohExtensionMethod { public static class Extensions { public static int ToInt32(this string s) { return Int32.Parse(s); } public static T[] Slice<T>(this T[] source, int index, int count) { if (index < 0 || count < 0 || source.Length - index < count) { throw new ArgumentException(); } T[] result = new T[count]; Array.Copy(source, index, result, 0, count); return result; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace contohExtensionMethod { class Program { static void Main(string[] args) { string str = "1234"; int integ1 = Extensions.ToInt32(str); int integ2 = str.ToInt32(); //Sama dengan Extensions.ToInt32(str) int[] digits = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int[] array1 = Extensions.Slice(digits, 4, 3); int[] array2 = digits.Slice(4, 3); //Sama dengan Extensions.Slice(digits, 4, 3) Console.WriteLine("Nilai integ1 = " + integ1.ToString()); Console.WriteLine("Nilai integ2 = " + integ2.ToString()); Console.WriteLine("\nNiali array1 = " + array1[1].ToString()); Console.WriteLine("Niali array2 = " + array2[1].ToString()); Console.WriteLine("\nTekan Enter untuk keluar..."); Console.ReadLine(); } } }
Query SyntaxVisual Studio menyediakan fitur full intellisense dan compile-time yang akan memeriksa sintax query yang di-support. Perhatikan contoh berikut ini :
var result = from c in Customers where c.City.StartsWith("B") orderby c.LastName select new { c.FirstName, c.LastName, c.Address };
var result = Customers.Where(c => c.City.StartsWith("B"))
.OrderBy(c => c.LastName)
.Select(c => new { c.FirstName, c.LastName, c.Address });
Keuntungan menggunakan Sintax Query adalah bahwa kode bahasa yang digunakan menjadi lebih mudah di fahami. Perlu juga diketahui bahwa query expression dimulai dengan klausa from dan diakhiri dengan klausa select atau group.
Baiklah, demikian dulu pembahasan kita, pada tutorial selanjutnya insya Allah kita akan membahas tentang LINQ to Object.
sumber :
http://www.codeproject.com/Articles/19154/Understanding-LINQ-C
http://msdn.microsoft.com/en-us/library/bb308966.aspx
http://www.codeproject.com/Articles/22700/C-3-0-New-Language-Features-Part-1
http://www.codeproject.com/Articles/23174/C-3-0-New-Language-Features-Part-2
Tidak ada komentar:
Posting Komentar