C# LINQ Left Join

Sdílet
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

Komentáře • 78

  • @codaza-channel
    @codaza-channel  Před 2 lety +9

    Удобная навигация по видео :)
    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)

  • @Shoyoish
    @Shoyoish Před 2 lety +23

    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

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Hi Victor, I am happy that you are satisfied with the content. Thank you for the comment. I really appreciate it 🙂

  • @ktl6387
    @ktl6387 Před 2 lety +22

    уроки в виде анимаций хорошая идея, это очень помогает новичкам понять материал, метишь в топ каналы по C#

  • @lettuceturnipthebeets790
    @lettuceturnipthebeets790 Před 2 lety +18

    LINQ очень полезная тема, пожалуйста рассмотри больше деталей из библиотеки! Видео шикарное 💙

    • @codaza-channel
      @codaza-channel  Před 2 lety +4

      Благодарю! Обязательно будем возвращаться к LINQ на канале время от времени :)

    • @Victor-nm5rv
      @Victor-nm5rv Před 2 lety +2

      @@codaza-channel было бы супер) я сейчас стажируюсь в одной фирме, и постоянно поглядываю твои видосы которые очень спасают) срочно побольше контента по Linq)

  • @dec1ne771
    @dec1ne771 Před 2 lety +4

    это лучший контент для начинающих программистов который я когда-либо видел: интонация, речь, паузы, информация ну просто предельно понятно, спасибо большое за ваш труд :)

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Благодарю за высокую оценку 💙

  • @Victor-nm5rv
    @Victor-nm5rv Před 2 lety +6

    побольше по Linq пожалуйста) очень годный канал)

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p Před 2 lety +9

    Офигенно. Требую продолжение банкета по Linq )))

  • @andrewbirs2046
    @andrewbirs2046 Před rokem +1

    Второй понравился больше он лаконичнее и хорошо пахнет ))

  • @MrCommanderKid
    @MrCommanderKid Před 2 lety +7

    Нормально так! Про первый способ не знал даже, всегда все вторым лепил😎

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Query Syntax очень напоминает SQL, поэтому я чаще всего предпочитаю именно его. Но Method Syntax тоже применяю для небольших конструкций, чтобы оставлять код коротким и более читабельным.

    • @yaric99
      @yaric99 Před 2 lety +4

      Я тоже обычно использовал Method-based syntax, хоть и знал про другой.

  • @user-bv8tk5vt2l
    @user-bv8tk5vt2l Před 2 lety +1

    Лучший канал по c#. Если будет в таком формате платный контент, то готов подписаться

  • @user-yt9gf2lu7b
    @user-yt9gf2lu7b Před 2 lety +4

    Лайк, классная подача🔥🔥🔥

  • @user-vh6wy7yj1o
    @user-vh6wy7yj1o Před 2 lety

    Спасибо что назвал гением)

  • @user-yt5pl9wk3l
    @user-yt5pl9wk3l Před 2 lety +4

    Шедевр! Спасибо!

  • @denchikniki2741
    @denchikniki2741 Před 2 lety +1

    Благодарю! Полезная инфа

  • @hamoveam6861
    @hamoveam6861 Před 2 lety +2

    с возвращением

  • @user-we5ro2tq8p
    @user-we5ro2tq8p Před 2 lety +1

    Лайк не глядя 👍

  • @artemkoziarskyi9691
    @artemkoziarskyi9691 Před 2 lety +1

    Большое спасибо.

  • @user-we8cb5pj1s
    @user-we8cb5pj1s Před 2 lety +3

    Уроки по LINQ? Годно!!!))

  • @sektor7825
    @sektor7825 Před 10 měsíci

    Кстати второй способ в LINQ (Method syntax) используют часто те люди которые любят функциональную парадигму а не ООП. Они любят весь код в одну строчку писать. Вот и Method Syntax для них хорошо подходит. Декларативный подход.

  • @WorldCount
    @WorldCount Před 2 lety +1

    У меня с группировки только мозг откатывается, а тут прям топ)

  • @zero-ix3bz
    @zero-ix3bz Před 2 lety

    харош

  • @Popeliuha
    @Popeliuha Před 2 lety +1

    Жду обзор на РАЙТ ДЖОЙН!!!1 Афигенный голос и подача ❤️

  • @blackdream9372
    @blackdream9372 Před 10 měsíci +2

    В EntityFramework все намного проще и Left Join можно заменить просто Include

  • @messenja2547
    @messenja2547 Před rokem

    Чтобы не плодить таких гениев, не нужно рассматривать их реализации)

  • @BrostylesCat
    @BrostylesCat Před 2 lety

    Такс, уже почти все пересмотрено, нужен новый контент)!

  • @ArtMeeron
    @ArtMeeron Před rokem

    👍 класс! очень полезная тема. А есть (или будет) что то подобное про Entity Framework и DbContext?

  • @grinlemon1694
    @grinlemon1694 Před 2 lety

    linq и лямбда выражения наверное самое сложное для новичков, было бы здорово посмотреть на разбор их работы от и до (как в данном случае почему в clienCityGroup будет выборка из всех элементов, хотя при отдельном join элемент с cityId = null не будет включен)

  • @bespalove4882
    @bespalove4882 Před 2 lety +1

    лайк, если ты Георгий

  • @user-nn8hh3jj4k
    @user-nn8hh3jj4k Před 2 lety +3

    На мой взгляд второй вариант более читабельнее

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Оба варианта достаточно широко используются. Кстати, Method Syntax выглядит лаконичнее во многих случаях, нежели Query Syntax.

    • @user-nn8hh3jj4k
      @user-nn8hh3jj4k Před 2 lety

      @@codaza-channel Но если нужно сделать несколько LEFT JOIN то первый вариант более читаемый.

  • @sergopro4934
    @sergopro4934 Před 2 lety

    Походу я тот самый "избранный"XD

  • @konstantanter
    @konstantanter Před 10 měsíci

    10:17 это просто тросникрвый семантический сахар 😅

  • @programisli
    @programisli Před 2 lety +3

    Посмотрел пару видео, хорошо рассказываешь, но во всех предыдущих видео текст был слишком мелким. В этом видео он на много более читаемый. Если будешь снова записывать экран с VS, то увеличивай шрифты. Но лучше все же в стиле этого видоса, мне лучше зашло. Подписался

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Благодарю за обратную связь. Поработаю над шрифтами 🙂

  • @talisman1104
    @talisman1104 Před 10 měsíci +1

    Второй меток как-то ближе к сердцу. Наверное из-за того, что работаешь с этим как с обычными методами

  • @rolpogo
    @rolpogo Před 2 lety

    Спасибо, с одним left join всё понятно. А как будет выглядеть синтаксис linq, если после left join Cities ещё будет left join Region rg on rg.Id = ci.RegionId? И в финальной выборке также будет выводиться принадлежность города к области.

    • @codaza-channel
      @codaza-channel  Před 2 lety +4

      Спасибо за хороший вопрос. Здесь ничего сложного, мы просто продолжаем цепочку связок через 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 };

    • @rolpogo
      @rolpogo Před 2 lety +1

      @@codaza-channel Спасибо, добрый человек! Адаптировал под свой вариант, всё заработало!

  • @Phalaphun
    @Phalaphun Před 2 lety +1

    А что за subCities в query syntax ?

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Псевдоним для выборки из clientCityGroup. Так же как clients является псевдонимом для выборки из GetClients() и cities для выборки из GetCities().

  • @mod_fox
    @mod_fox Před 2 lety

    Я совсем пельмешек
    Помогите пожалуйста, как реализовать класс Client и City?

    • @codaza-channel
      @codaza-channel  Před 2 lety +1

      Ловите 🙂
      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; }
      }

  • @StalkerSun
    @StalkerSun Před rokem

    Как DataTable за джойнить?

    • @codaza-channel
      @codaza-channel  Před rokem

      Подробный гайд как это сделать: www.c-sharpcorner.com/UploadFile/0c1bb2/join-two-datatable-using-linq-in-Asp-Net-C-Sharp/

  • @mr_smind
    @mr_smind Před rokem

    а почему не .Include() ?

    • @codaza-channel
      @codaza-channel  Před rokem

      Можно и Include(), но join имеет более широкий смысл. Include хорошо подходит, когда нам требуются данные вложенной сущности при использовании EntityFramework, при условии, что они имеют явную связь. Join позволяет нам выполнить связку двух плоских сущностей по некоторому критерию (или множеству критериев), без явной связи по ключам (как в примере из ролика). Но, при явной связи двух сущностей по ключам, точно Include, это просто и быстро 👍

    • @mr_smind
      @mr_smind Před rokem +1

      @@codaza-channel Спасибо за ответ, я в комментах видел что вы уже на него отвечали. Отличное изложение материала. с меня лайк, коммент и подписка )

  • @ashotrustavelyan7498
    @ashotrustavelyan7498 Před 2 lety

    кодаза, салам пополам, знаю что у тя и так много дел, в том числе пилить вот такте вот видосики для нас, но у меня один вопрос, если не сложно помоХи)))...
    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" за раз??? ...спасибо за ранее, думаю гостей твоего канала также заинтересует данный вопрос

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Привет! :)
      Если я правильно тебя понял, тебе нужна информация по пользователям. Попробуй через 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
      @codaza-channel  Před 2 lety

      А, тебе, видимо, нужно иметь возможность вывода нескольких ролей, которые есть у одного пользователя?

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 Před 2 lety

      @@codaza-channel спасибо за оперативный ответ, в "Role" нужно передать несколько ролей через "select new UserKeyValue() { ...Role = r.Name } (за раз, чтобы не было несколько ответов за один пуск postmen - а из-за того что в Role приходит два значения, но записывается один и так 2 раза)"...надеюсь правильно сформулировал))

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 Před 2 lety

      @@codaza-channel да, то есть в "Role" должно записываться несолько значений - ролей в блоке "select new UserKeyValue() { ...Role = r.Name }

    • @codaza-channel
      @codaza-channel  Před 2 lety

      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();

  • @dazl974
    @dazl974 Před 2 lety

    Хахаха .Where(cl => cl.Name =="Genius") делает бррррррр.....

    • @codaza-channel
      @codaza-channel  Před 2 lety

      Оба способа широко применятся. На мой взгляд (в случае с Left Join) Method Syntax выглядит несколько избыточным. При этом, очень часто его использование вполне лаконично :)

  • @ashotrustavelyan7498
    @ashotrustavelyan7498 Před 2 lety +2

    Кодаза здарова, как раз 2 недели назад мучился над этим и нашел еще одно решение, анологичное этому :
    var product = _context.Products.Include(x => x.Requisites);

    • @codaza-channel
      @codaza-channel  Před 2 lety +2

      Привет! 🙂 Решение отличное, но join имеет более широкий смысл. Include хорошо подходит, когда нам требуются данные вложенной сущности при использовании EntityFramework, при условии, что они имеют явную связь. Join позволяет нам выполнить связку двух плоских сущностей по некоторому критерию (или множеству критериев), без явной связи по ключам (как в примере из ролика). Но, при явной связи двух сущностей по ключам, точно Include, это просто и быстро 👍

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 Před 2 lety +1

      @@codaza-channel thnx