C# LINQ Left Join

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ก.ค. 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)

  • @user-yo7mw6oj4p
    @user-yo7mw6oj4p 2 ปีที่แล้ว +9

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

  • @Victor-nm5rv
    @Victor-nm5rv 2 ปีที่แล้ว +6

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

  • @dec1ne771
    @dec1ne771 2 ปีที่แล้ว +4

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

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

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

  • @MrCommanderKid
    @MrCommanderKid 2 ปีที่แล้ว +7

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

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

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

    • @yaric99
      @yaric99 2 ปีที่แล้ว +4

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

  • @andrewbirs2046
    @andrewbirs2046 ปีที่แล้ว +1

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

  • @user-yt9gf2lu7b
    @user-yt9gf2lu7b 2 ปีที่แล้ว +4

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

  • @user-bv8tk5vt2l
    @user-bv8tk5vt2l 2 ปีที่แล้ว +1

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

  • @denchikniki2741
    @denchikniki2741 2 ปีที่แล้ว +1

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

  • @hamoveam6861
    @hamoveam6861 2 ปีที่แล้ว +2

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

  • @user-yt5pl9wk3l
    @user-yt5pl9wk3l 2 ปีที่แล้ว +4

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

  • @user-we5ro2tq8p
    @user-we5ro2tq8p 2 ปีที่แล้ว +1

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

  • @artemkoziarskyi9691
    @artemkoziarskyi9691 2 ปีที่แล้ว +1

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

  • @user-vh6wy7yj1o
    @user-vh6wy7yj1o 2 ปีที่แล้ว

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

  • @sektor7825
    @sektor7825 10 หลายเดือนก่อน

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

  • @user-we8cb5pj1s
    @user-we8cb5pj1s 2 ปีที่แล้ว +3

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

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

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

    • @floydmayweather6934
      @floydmayweather6934 2 ปีที่แล้ว

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

  • @zero-ix3bz
    @zero-ix3bz 2 ปีที่แล้ว

    харош

  • @WorldCount
    @WorldCount 2 ปีที่แล้ว +1

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

  • @Popeliuha
    @Popeliuha 2 ปีที่แล้ว +1

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

  • @blackdream9372
    @blackdream9372 10 หลายเดือนก่อน +2

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

  • @ArtMeeron
    @ArtMeeron ปีที่แล้ว

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

  • @messenja2547
    @messenja2547 ปีที่แล้ว

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

  • @BrostylesCat
    @BrostylesCat 2 ปีที่แล้ว

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

  • @grinlemon1694
    @grinlemon1694 2 ปีที่แล้ว

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

  • @bespalove4882
    @bespalove4882 2 ปีที่แล้ว +1

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

  • @sergopro4934
    @sergopro4934 2 ปีที่แล้ว

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

  • @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 то первый вариант более читаемый.

  • @konstantanter
    @konstantanter 10 หลายเดือนก่อน

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

  • @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 Спасибо, добрый человек! Адаптировал под свой вариант, всё заработало!

  • @programisli
    @programisli 2 ปีที่แล้ว +3

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

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

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

  • @talisman1104
    @talisman1104 10 หลายเดือนก่อน +1

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

  • @Phalaphun
    @Phalaphun 2 ปีที่แล้ว +1

    А что за subCities в query syntax ?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

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

  • @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; }
      }

  • @StalkerSun
    @StalkerSun ปีที่แล้ว

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

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว

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

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

  • @mr_smind
    @mr_smind ปีที่แล้ว

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

    • @codaza-channel
      @codaza-channel  ปีที่แล้ว

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

    • @mr_smind
      @mr_smind ปีที่แล้ว +1

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

  • @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