آموزش Linq - بخش ششم: عملگرهای پرس و جو قسمت پنجم (پایانی)
نویسنده: مهدی ملائیان
تاریخ: ۱۳۹۵/۰۲/۰۸ ۱۱:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public static IEnumerable<TResult> Join<TOuter,TInner,TKey,TResult> (this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,TInner,TResult> resultSelector)
Recipe[] recipes =
{
new Recipe {Id = 1, Name = "Mashed Potato"},
new Recipe {Id = 2, Name = "Crispy Duck"},
new Recipe {Id = 3, Name = "Sachertorte"}
};
// inner sequence
Review[] reviews =
{
new Review {RecipeId = 1, ReviewText = "Tasty!"},
new Review {RecipeId = 1, ReviewText = "Not nice :("},
new Review {RecipeId = 1, ReviewText = "Pretty good"},
new Review {RecipeId = 2, ReviewText = "Too hard"},
new Review {RecipeId = 2, ReviewText = "Loved it"}
};
var query = recipes // recipes توالی خارجی
.Join(reviews, // reviewsتوالی داخلی
(Recipe outerKey) => outerKey.Id, // کلید انخاب شده از توالی خارجی
(Review innerKey) => innerKey.RecipeId, // کلید انتخاب شده از توالی داخلی
// نحوه قالب بندی خروجی
(recipe, review) => recipe.Name + " - " + review.ReviewText);
foreach (string item in query)
{
Console.WriteLine(item);
} Mashed Potato - Tasty! Mashed Potato - Not nice :( Mashed Potato - Pretty good Crispy Duck - Too hard Crispy Duck - Loved it
var query = recipes.Join (reviews, outerKey => outerKey.Id, innerKey => innerKey.RecipeId, (recipe, review) => recipe.Name + " - " + review.ReviewText);
var query = from recipe in recipes
join review in reviews
on
recipe.Id equals review.RecipeId
select new //انواع بی نام
{
RecipeName = recipe.Name,
RecipeReview = review.ReviewText
};
foreach (var item in query)
{
Console.WriteLine(item.RecipeName + " - " + item.RecipeReview);
} // outer sequence
Recipe[] recipes =
{
new Recipe {Id = 1, Name = "Mashed Potato"},
new Recipe {Id = 2, Name = "Crispy Duck"},
new Recipe {Id = 3, Name = "Sachertorte"}
};
// inner sequence
Review[] reviews =
{
new Review {RecipeId = 1, ReviewText = "Tasty!"},
new Review {RecipeId = 1, ReviewText = "Not nice :("},
new Review {RecipeId = 1, ReviewText = "Pretty good"},
new Review {RecipeId = 2, ReviewText = "Too hard"},
new Review {RecipeId = 2, ReviewText = "Loved it"}
};
var query = recipes
.GroupJoin(
reviews,
(Recipe outerKey) => outerKey.Id,//outer key
(Review innerKey) => innerKey.RecipeId,//inner key
(Recipe recipe, IEnumerable<Review> rev )=>تعریف ساختار گروهها new
{
RecipeName = recipe.Name,
Reviews = rev
}
);
foreach (var item in query)
{
Console.WriteLine($"Reviews for {item.RecipeName}");
foreach (var review in item.Reviews)
{
Console.WriteLine($" - {review.ReviewText}");
}
} Reviews for Mashed Potato - Tasty! - Not nice :( - Pretty good Reviews for Crispy Duck - Too hard - Loved it Reviews for Sachertorte
var query =
from recipe in recipes
join review in reviews on recipe.Id equals review.RecipeId
into reviewGroup
select new //انواع بی نام
{
RecipeName = recipe.Name,
Reviews = reviewGroup//کلیه بازخوردها مرتبط با یک دستور غذایی
}; Reviews for Mashed Potato - Tasty! - Not nice :( - Pretty good Reviews for Crispy Duck - Too hard - Loved it Reviews for Sachertorte
public class Ingredient
{
public string Name { get; set; }
public int Calories { get; set; }
}
string[] names = { "Flour", "Butter", "Sugar" };
int[] calories = { 100, 400, 500 };
IEnumerable<Ingredient> ingredients =
names.Zip(calories, (name, calorie) =>
new Ingredient
{
Name = name,
Calories = calorie
});
foreach (var item in ingredients)
{
Console.WriteLine($"{item.Name} has {item.Calories} calories");
} Flour has 100 calories Butter has 400 calories Sugar has 500 calories