C# LINQ Left Join

Поділитися
Вставка
  • Опубліковано 6 жов 2024

КОМЕНТАРІ • 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 роки тому +24

    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 роки тому +19

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

    • @codaza-channel
      @codaza-channel  2 роки тому +4

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

    • @Victor-nm5rv
      @Victor-nm5rv 2 роки тому +2

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

  • @andrewbirs2046
    @andrewbirs2046 Рік тому +1

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

  • @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, хоть и знал про другой.

  • @Victor-nm5rv
    @Victor-nm5rv 2 роки тому +6

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

  • @Дмитрийсекрет-н7о
    @Дмитрийсекрет-н7о 2 роки тому +9

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

  • @МаксимМакаров-л5т
    @МаксимМакаров-л5т 2 роки тому +4

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

  • @ЭмирЭмир-ъ5с
    @ЭмирЭмир-ъ5с 2 роки тому +4

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

  • @Bagaev0
    @Bagaev0 2 роки тому +1

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

  • @ВладимирГребенюк-ч5х

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

  • @user-we8cb5pj1s
    @user-we8cb5pj1s 2 роки тому +3

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

    • @codaza-channel
      @codaza-channel  2 роки тому +1

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

    • @floydmayweather6934
      @floydmayweather6934 2 роки тому

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

  • @викторНайс-ж5ъ
    @викторНайс-ж5ъ 2 роки тому +1

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

  • @artemkoziarskyi9691
    @artemkoziarskyi9691 2 роки тому +1

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

  • @denchikniki2741
    @denchikniki2741 2 роки тому +1

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

  • @hamoveam6861
    @hamoveam6861 2 роки тому +2

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

  • @zero-ix3bz
    @zero-ix3bz 2 роки тому

    харош

  • @Popeliuha
    @Popeliuha 2 роки тому +1

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

  • @WorldCount
    @WorldCount 2 роки тому +1

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

  • @sektor7825
    @sektor7825 Рік тому

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

  • @messenja2547
    @messenja2547 Рік тому

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

  • @blackdream9372
    @blackdream9372 Рік тому +2

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

  • @СеменДмитриенко-х5э

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

    • @codaza-channel
      @codaza-channel  2 роки тому +1

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

    • @СеменДмитриенко-х5э
      @СеменДмитриенко-х5э 2 роки тому

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

  • @programisli
    @programisli 2 роки тому +3

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

    • @codaza-channel
      @codaza-channel  2 роки тому

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

  • @BrostylesCat
    @BrostylesCat 2 роки тому

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

  • @ArtMeeron
    @ArtMeeron Рік тому

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

  • @grinlemon1694
    @grinlemon1694 2 роки тому

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

  • @bespalove4882
    @bespalove4882 2 роки тому +1

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

  • @sergopro4934
    @sergopro4934 2 роки тому

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

  • @talisman1104
    @talisman1104 Рік тому +1

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

  • @konstantanter
    @konstantanter Рік тому

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

  • @Phalaphun
    @Phalaphun 2 роки тому +1

    А что за subCities в query syntax ?

    • @codaza-channel
      @codaza-channel  2 роки тому

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

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

  • @StalkerSun
    @StalkerSun 2 роки тому

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

    • @codaza-channel
      @codaza-channel  2 роки тому

      Подробный гайд как это сделать: 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 2 роки тому

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

    • @codaza-channel
      @codaza-channel  2 роки тому

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

    • @mr_smind
      @mr_smind 2 роки тому +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