C# LINQ Left Join

Поделиться
HTML-код
  • Опубликовано: 15 июл 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

Комментарии • 78

  • @codaza-channel
    @codaza-channel  2 года назад +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)

    • @PAPAKOTT
      @PAPAKOTT 2 года назад +1

      ))) Круто !

  • @Shoyoish
    @Shoyoish 2 года назад +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  2 года назад +1

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

  • @ktl6387
    @ktl6387 2 года назад +22

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

  • @lettuceturnipthebeets790
    @lettuceturnipthebeets790 2 года назад +18

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

    • @codaza-channel
      @codaza-channel  2 года назад +4

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

    • @Victor-nm5rv
      @Victor-nm5rv 2 года назад +2

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

  • @andrewbirs2046
    @andrewbirs2046 Год назад +1

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

  • @MrCommanderKid
    @MrCommanderKid 2 года назад +7

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

    • @codaza-channel
      @codaza-channel  2 года назад +1

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

    • @yaric99
      @yaric99 2 года назад +4

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

  • @dec1ne771
    @dec1ne771 2 года назад +4

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

    • @codaza-channel
      @codaza-channel  2 года назад

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

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p 2 года назад +9

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

  • @Victor-nm5rv
    @Victor-nm5rv 2 года назад +6

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

  • @denchikniki2741
    @denchikniki2741 2 года назад +1

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

  • @hamoveam6861
    @hamoveam6861 2 года назад +2

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

  • @user-yt9gf2lu7b
    @user-yt9gf2lu7b 2 года назад +4

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

  • @artemkoziarskyi9691
    @artemkoziarskyi9691 2 года назад +1

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

  • @user-we5ro2tq8p
    @user-we5ro2tq8p 2 года назад +1

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

  • @user-yt5pl9wk3l
    @user-yt5pl9wk3l 2 года назад +4

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

  • @user-we8cb5pj1s
    @user-we8cb5pj1s 2 года назад +3

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

    • @codaza-channel
      @codaza-channel  2 года назад +1

      Да 🙂 Благодарю!

    • @floydmayweather6934
      @floydmayweather6934 2 года назад

      @@codaza-channel Будут дальше продолжения по Linq?

  • @user-bv8tk5vt2l
    @user-bv8tk5vt2l 2 года назад +1

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

  • @user-vh6wy7yj1o
    @user-vh6wy7yj1o 2 года назад

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

  • @zero-ix3bz
    @zero-ix3bz 2 года назад

    харош

  • @sektor7825
    @sektor7825 10 месяцев назад

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

  • @Popeliuha
    @Popeliuha 2 года назад +1

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

  • @WorldCount
    @WorldCount 2 года назад +1

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

  • @blackdream9372
    @blackdream9372 10 месяцев назад +2

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

  • @BrostylesCat
    @BrostylesCat 2 года назад

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

  • @messenja2547
    @messenja2547 Год назад

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

  • @ArtMeeron
    @ArtMeeron Год назад

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

  • @grinlemon1694
    @grinlemon1694 2 года назад

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

  • @bespalove4882
    @bespalove4882 2 года назад +1

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

  • @user-nn8hh3jj4k
    @user-nn8hh3jj4k 2 года назад +3

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

    • @codaza-channel
      @codaza-channel  2 года назад +1

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

    • @user-nn8hh3jj4k
      @user-nn8hh3jj4k 2 года назад

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

  • @sergopro4934
    @sergopro4934 2 года назад

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

  • @programisli
    @programisli 2 года назад +3

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

    • @codaza-channel
      @codaza-channel  2 года назад

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

  • @konstantanter
    @konstantanter 10 месяцев назад

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

  • @talisman1104
    @talisman1104 10 месяцев назад +1

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

  • @rolpogo
    @rolpogo 2 года назад

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

    • @codaza-channel
      @codaza-channel  2 года назад +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 2 года назад +1

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

  • @Phalaphun
    @Phalaphun 2 года назад +1

    А что за subCities в query syntax ?

    • @codaza-channel
      @codaza-channel  2 года назад

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

  • @StalkerSun
    @StalkerSun Год назад

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

    • @codaza-channel
      @codaza-channel  Год назад

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

  • @mod_fox
    @mod_fox 2 года назад

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

    • @codaza-channel
      @codaza-channel  2 года назад +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; }
      }

  • @mr_smind
    @mr_smind Год назад

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

    • @codaza-channel
      @codaza-channel  Год назад

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

    • @mr_smind
      @mr_smind Год назад +1

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

  • @ashotrustavelyan7498
    @ashotrustavelyan7498 2 года назад

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

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

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

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 2 года назад

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

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 2 года назад

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

    • @codaza-channel
      @codaza-channel  2 года назад

      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 2 года назад

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

    • @codaza-channel
      @codaza-channel  2 года назад

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

  • @ashotrustavelyan7498
    @ashotrustavelyan7498 2 года назад +2

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

    • @codaza-channel
      @codaza-channel  2 года назад +2

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

    • @ashotrustavelyan7498
      @ashotrustavelyan7498 2 года назад +1

      @@codaza-channel thnx