C LINQ JOIN - работа с объединениями таблиц в C# с использованием LINQ
Оператор Join в LINQ позволяет объединять две коллекции по заданному условию. Он возвращает новую коллекцию, которая содержит объединенные элементы из двух исходных коллекций.
Пример использования оператора Join:
List products = new List()
{
new Product { Id = 1, Name = "Product 1", CategoryId = 1 },
new Product { Id = 2, Name = "Product 2", CategoryId = 2 },
new Product { Id = 3, Name = "Product 3", CategoryId = 1 },
};
List categories = new List()
{
new Category { Id = 1, Name = "Category 1" },
new Category { Id = 2, Name = "Category 2" },
};
var result = products.Join(categories, p => p.CategoryId, c => c.Id, (p, c) => new { Product = p, Category = c });
foreach (var item in result)
{
Console.WriteLine($"Product: {item.Product.Name}, Category: {item.Category.Name}");
}
В данном примере у нас есть две коллекции - `products` и `categories`. Каждый элемент коллекции `products` имеет свойство `CategoryId`, которое связывается с `Id` элемента коллекции `categories`.
Оператор Join принимает четыре параметра:
1. Первую коллекцию для объединения.
2. Вторую коллекцию для объединения.
3. Условие соответствия элементов первой и второй коллекций.
4. Функцию, которая определяет, какие данные нужно вернуть в итоговой коллекции.
В нашем примере:
- `p => p.CategoryId` указывает, что мы хотим соотнести свойство `CategoryId` элемента из первой коллекции.
- `c => c.Id` указывает, что мы хотим соотнести свойство `Id` элемента из второй коллекции.
- `(p, c) => new { Product = p, Category = c }` указывает, что мы хотим создать анонимный тип со свойствами `Product` и `Category` и заполнить их значениями из соответствующих элементов.
В итоге, мы получаем новую коллекцию `result`, которая содержит объединенные элементы из `products` и `categories`. Мы можем использовать эту коллекцию для дальнейшей обработки данных.
Результат выполнения примера будет следующим:
Product: Product 1, Category: Category 1
Product: Product 2, Category: Category 2
Product: Product 3, Category: Category 1
Таким образом, оператор Join позволяет сделать связи между элементами двух коллекций по заданному условию и получить новую коллекцию с объединенными данными.