// The Three Parts of a LINQ Query: // 1. منبع داده int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. ایجاد پرس و جو // numQuery is an IEnumerable<int> var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. اجرای پرس و جو foreach (int num in numQuery) { Console.Write("{0,1} ", num); }
class Ingredient { public string Name { get; set; } public int Calories { get; set; } }
Ingredient[] ingredients = { new Ingredient {Name = "Suger", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100 }, new Ingredient {Name = "Milk", Calories = 150 }, new Ingredient {Name = "Flour", Calories = 50 }, new Ingredient {Name = "Butter", Calories = 200 } };
Ingredient[] ingredients = { new Ingredient {Name = "Suger", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100 }, new Ingredient {Name = "Milk", Calories = 150 }, new Ingredient {Name = "Flour", Calories = 50 }, new Ingredient {Name = "Butter", Calories = 200 } }; IEnumerable<string> highCalories = ingredients.Where(x => x.Calories >= 150) .OrderBy(x => x.Name) .Select(x => x.Name); foreach (var item in highCalories) { Console.WriteLine(item); }
Butter Milk Suger
عبارت Lambda نوشته شدهی در بخش Select مشخص میکند که خروجی بر اساس چه خصوصیتی از توالی ورودی باشد. در اینجا نام عناصر به صورت رشته در خروجی ظاهر میشوند.
سبک Query Expression (عبارتهای پرس و جو)
Query Expression یک گرامر زیبا و روان برای نوشتن پرس و جوها را ارائه میدهد. در مثال زیر از سبک Query Expression استفاده کردهایم:
Ingredient[] ingredients = { new Ingredient {Name = "Suger", Calories = 500}, new Ingredient {Name = "Egg", Calories = 100}, new Ingredient {Name = "Milk", Calories = 150}, new Ingredient {Name = "Flour", Calories = 50}, new Ingredient {Name = "Butter", Calories = 200} }; IEnumerable<string> highCalories = from i in ingredients where i.Calories >= 150 orderby i.Name select i.Name; foreach (var item in highCalories) { Console.WriteLine(item); }
خروجی کد بالا با خروجی کد به سبک Fluent یکسان است:
Butter Milk Suger
همانطور که میبینید ترتیب عملیات همانند روش قبل است. عبارتهای پرس و جوی (from,where,orderby,select) به ترتیب با اصلاح توالی ورودی و تحویل آن به عبارت جستجوی بعدی کار را انجام میدهند.
عبارت جستجوی بالا با کلمهی کلیدی from آغاز شده است. هدف from دو چیز است:
1- مشخص کردن توالی ورودی (منبع داده)
2- معرفی متغیر Range (مشخص کردن عنصر مورد نظر در منبع داده)
متغیر Range همچون متغیر شمارنده در حلقه هاست.
در ادامه این سری آموزشی درباره متغیر Range بصورت کاملتری بحث خواهیم کرد.