C# LINQ Left Join
Vložit
- čas přidán 9. 07. 2024
- В ролике рассмотрим использование LINQ для выполнения Left Join. Поговорим о том, зачем вообще нужно делать Left Join. Посмотрим на суть связки через призму Transact SQL. Сделаем Left Join в двух синтаксисах LINQ - Query Syntax и Method Syntax.
Telegram канал: t.me/codaza
На кофе ☕️: pay.cloudtips.ru/p/179d0532
Patreon: / codaza
Boosty: boosty.to/codaza
0:00 - Начало
0:44 - Концепт Left Join
3:05 - Left Join в Transact SQL
4:41 - Left Join в LINQ (Query Syntax)
7:40 - Left Join в LINQ (Method Syntax)
#linq #csharp #net6 #ityoutubers #codaza
Удобная навигация по видео :)
0:00 - Начало
0:44 - Концепт Left Join
3:05 - Left Join в Transact SQL
4:41 - Left Join в LINQ (Query Syntax)
7:40 - Left Join в LINQ (Method Syntax)
))) Круто !
I'm from Brazil and even without understanding the language, I could understand all the content. thank you very much, great video and nice edit
Hi Victor, I am happy that you are satisfied with the content. Thank you for the comment. I really appreciate it 🙂
уроки в виде анимаций хорошая идея, это очень помогает новичкам понять материал, метишь в топ каналы по C#
LINQ очень полезная тема, пожалуйста рассмотри больше деталей из библиотеки! Видео шикарное 💙
Благодарю! Обязательно будем возвращаться к LINQ на канале время от времени :)
@@codaza-channel было бы супер) я сейчас стажируюсь в одной фирме, и постоянно поглядываю твои видосы которые очень спасают) срочно побольше контента по Linq)
это лучший контент для начинающих программистов который я когда-либо видел: интонация, речь, паузы, информация ну просто предельно понятно, спасибо большое за ваш труд :)
Благодарю за высокую оценку 💙
побольше по Linq пожалуйста) очень годный канал)
Офигенно. Требую продолжение банкета по Linq )))
Второй понравился больше он лаконичнее и хорошо пахнет ))
Нормально так! Про первый способ не знал даже, всегда все вторым лепил😎
Query Syntax очень напоминает SQL, поэтому я чаще всего предпочитаю именно его. Но Method Syntax тоже применяю для небольших конструкций, чтобы оставлять код коротким и более читабельным.
Я тоже обычно использовал Method-based syntax, хоть и знал про другой.
Лучший канал по c#. Если будет в таком формате платный контент, то готов подписаться
Лайк, классная подача🔥🔥🔥
Спасибо что назвал гением)
Шедевр! Спасибо!
Благодарю :)
Благодарю! Полезная инфа
с возвращением
Лайк не глядя 👍
Большое спасибо.
Уроки по LINQ? Годно!!!))
Да 🙂 Благодарю!
@@codaza-channel Будут дальше продолжения по Linq?
Кстати второй способ в LINQ (Method syntax) используют часто те люди которые любят функциональную парадигму а не ООП. Они любят весь код в одну строчку писать. Вот и Method Syntax для них хорошо подходит. Декларативный подход.
У меня с группировки только мозг откатывается, а тут прям топ)
харош
Жду обзор на РАЙТ ДЖОЙН!!!1 Афигенный голос и подача ❤️
💙
В EntityFramework все намного проще и Left Join можно заменить просто Include
Чтобы не плодить таких гениев, не нужно рассматривать их реализации)
Такс, уже почти все пересмотрено, нужен новый контент)!
👍 класс! очень полезная тема. А есть (или будет) что то подобное про Entity Framework и DbContext?
linq и лямбда выражения наверное самое сложное для новичков, было бы здорово посмотреть на разбор их работы от и до (как в данном случае почему в clienCityGroup будет выборка из всех элементов, хотя при отдельном join элемент с cityId = null не будет включен)
лайк, если ты Георгий
На мой взгляд второй вариант более читабельнее
Оба варианта достаточно широко используются. Кстати, Method Syntax выглядит лаконичнее во многих случаях, нежели Query Syntax.
@@codaza-channel Но если нужно сделать несколько LEFT JOIN то первый вариант более читаемый.
Походу я тот самый "избранный"XD
10:17 это просто тросникрвый семантический сахар 😅
Посмотрел пару видео, хорошо рассказываешь, но во всех предыдущих видео текст был слишком мелким. В этом видео он на много более читаемый. Если будешь снова записывать экран с VS, то увеличивай шрифты. Но лучше все же в стиле этого видоса, мне лучше зашло. Подписался
Благодарю за обратную связь. Поработаю над шрифтами 🙂
Второй меток как-то ближе к сердцу. Наверное из-за того, что работаешь с этим как с обычными методами
Спасибо, с одним left join всё понятно. А как будет выглядеть синтаксис linq, если после left join Cities ещё будет left join Region rg on rg.Id = ci.RegionId? И в финальной выборке также будет выводиться принадлежность города к области.
Спасибо за хороший вопрос. Здесь ничего сложного, мы просто продолжаем цепочку связок через join. Запрос с провязкой по регионам будет выглядеть следующим образом:
from clients in GetClients()
join cities in GetCities() on clients.CityId equals cities.Id into clientCityGroup
from subCities in clientCityGroup.DefaultIfEmpty()
join regions in GetRegions() on subCities?.Id equals regions.CityId into regionCityGroup
from subRegions in regionCityGroup.DefaultIfEmpty()
select new { clientName = clients.Name, cityName = subCities?.Name, regionName = subRegions?.Name };
@@codaza-channel Спасибо, добрый человек! Адаптировал под свой вариант, всё заработало!
А что за subCities в query syntax ?
Псевдоним для выборки из clientCityGroup. Так же как clients является псевдонимом для выборки из GetClients() и cities для выборки из GetCities().
Я совсем пельмешек
Помогите пожалуйста, как реализовать класс Client и City?
Ловите 🙂
public class City
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public int? CityId { get; set; }
}
Как DataTable за джойнить?
Подробный гайд как это сделать: www.c-sharpcorner.com/UploadFile/0c1bb2/join-two-datatable-using-linq-in-Asp-Net-C-Sharp/
а почему не .Include() ?
Можно и Include(), но join имеет более широкий смысл. Include хорошо подходит, когда нам требуются данные вложенной сущности при использовании EntityFramework, при условии, что они имеют явную связь. Join позволяет нам выполнить связку двух плоских сущностей по некоторому критерию (или множеству критериев), без явной связи по ключам (как в примере из ролика). Но, при явной связи двух сущностей по ключам, точно Include, это просто и быстро 👍
@@codaza-channel Спасибо за ответ, я в комментах видел что вы уже на него отвечали. Отличное изложение материала. с меня лайк, коммент и подписка )
кодаза, салам пополам, знаю что у тя и так много дел, в том числе пилить вот такте вот видосики для нас, но у меня один вопрос, если не сложно помоХи)))...
var item = (from r in context.Roles
join ur in context.UserRoles on r.Id equals ur.RoleId
join us in context.Users on ur.UserId equals us.Id
select new UserKeyValue()
{
Name = us.UserName,
Surname = us.Surname,
Email = us.Email,
Status = us.StatusId,
Possition = us.Possition,
Role = r.Name
}).ToList();
return item;
в "r.Name" (из базы) результируется несолько значений и как можно передать их в "Role" за раз??? ...спасибо за ранее, думаю гостей твоего канала также заинтересует данный вопрос
Привет! :)
Если я правильно тебя понял, тебе нужна информация по пользователям. Попробуй через inner join от таблицы пользователей так:
var item = (
from us in context.Users
join ur in context.UserRoles on us.Id equals ur.UserId
join r in context.Roles on ur.RoleId equals r.Id
select new UserKeyValue()
{
Name = us.UserName,
Surname = us.Surname,
Email = us.Email,
Status = us.StatusId,
Possition = us.Possition,
Role = r.Name
})
.ToList();
Вот тут не понял: "как можно передать их в "Role" за раз". Что имеется ввиду?
А, тебе, видимо, нужно иметь возможность вывода нескольких ролей, которые есть у одного пользователя?
@@codaza-channel спасибо за оперативный ответ, в "Role" нужно передать несколько ролей через "select new UserKeyValue() { ...Role = r.Name } (за раз, чтобы не было несколько ответов за один пуск postmen - а из-за того что в Role приходит два значения, но записывается один и так 2 раза)"...надеюсь правильно сформулировал))
@@codaza-channel да, то есть в "Role" должно записываться несолько значений - ролей в блоке "select new UserKeyValue() { ...Role = r.Name }
Ok, думаю, ты это пытаешься получить. Обрати внимание, Roles - это теперь список:
var item = (
from us in context.Users
select new
{
Name = us.UserName,
Surname = us.Surname,
Email = us.Email,
Status = us.StatusId,
Possition = us.Possition,
Roles = (
from r in context.Roles
join ur in context.UserRoles on r.Id equals ur.RoleId
where ur.UserId == us.Id
select r
).ToList()
}).ToList();
Хахаха .Where(cl => cl.Name =="Genius") делает бррррррр.....
Оба способа широко применятся. На мой взгляд (в случае с Left Join) Method Syntax выглядит несколько избыточным. При этом, очень часто его использование вполне лаконично :)
Кодаза здарова, как раз 2 недели назад мучился над этим и нашел еще одно решение, анологичное этому :
var product = _context.Products.Include(x => x.Requisites);
Привет! 🙂 Решение отличное, но join имеет более широкий смысл. Include хорошо подходит, когда нам требуются данные вложенной сущности при использовании EntityFramework, при условии, что они имеют явную связь. Join позволяет нам выполнить связку двух плоских сущностей по некоторому критерию (или множеству критериев), без явной связи по ключам (как в примере из ролика). Но, при явной связи двух сущностей по ключам, точно Include, это просто и быстро 👍
@@codaza-channel thnx