Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > .NET: Базы данных > Как организовать LINQ Left Join с тремя таблицами?


Автор: ROLpogo 31.03.22, 12:44
Вот рабочий пример, как организовать Left Join для одной таблицы (City).

Эквивалент sql запроса:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select
      cl.Name as clientName,
      ci.Name as cityName
    from Client cl
      left join City ci on ci.ID = cl.CityID


<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    using System;
    using System.Collections.Generic;
    using System.Linq;
     
    namespace TestLinq
    {
      class Program
      {
        public class Client
        {
          public int ID;
          public string Name;
          public int ?CityID;
        }
     
        public class City
        {
          public int ID;
          public string Name;
          public int ?RegionID;
        }
     
        public class Region
        {
          public int ID;
          public string Name;
        }
     
        public static List<Client> GetClients()
        {
          return new List<Client>()
          {
            new Client {ID = 1, Name = "Client A", CityID = 1 },
            new Client {ID = 2, Name = "Client B", CityID = 2 },
            new Client {ID = 3, Name = "Client C", CityID = null },
            new Client {ID = 4, Name = "Client D", CityID = 2 }
          };
        }
     
        public static List<City> GetCities()
        {
          return new List<City>()
          {
            new City {ID = 1, Name = "City A", RegionID = 1 },
            new City {ID = 2, Name = "City B", RegionID = 3 },
            new City {ID = 3, Name = "City C", RegionID = null },
            new City {ID = 4, Name = "City D", RegionID = 3 }
          };
        }
     
        public static List<Region> GetRegions()
        {
          return new List<Region>()
          {
            new Region {ID = 1, Name = "Region A"},
            new Region {ID = 2, Name = "Region B"},
            new Region {ID = 3, Name = "Region C"},
            new Region {ID = 4, Name = "Region D"}
          };
        }
     
        static void Main(string[] args)
        {
          var result =
            from clients in GetClients()
            join cities in GetCities() on clients.CityID equals cities.ID into clientCityGroup
            from subCities in clientCityGroup.DefaultIfEmpty()
            select new { clientName = clients.Name, cityName = subCities?.Name };
     
          foreach (var current in result)
            Console.WriteLine($"{current.clientName} из города {current?.cityName}");
     
          Console.ReadKey();
        }
      }
    }


Вопрос: как организовать Left Join в LINQ для двух таблиц (City, Region)?

Эквивалент sql запроса:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    select
      cl.Name as clientName,
      ci.Name as cityName,
      rg.Name as regionName
    from Client cl
      left join City ci   on ci.ID = cl.CityID
      left join Region rg on rg.ID = ci.RegionID

Автор: ROLpogo 31.03.22, 22:34
Всем спасибо, решение найдено.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)