<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426483&amp;view=findpost&amp;p=3862302</guid>
        <pubDate>Thu, 31 Mar 2022 22:34:55 +0000</pubDate>
        <title>Как организовать LINQ Left Join с тремя таблицами?</title>
        <link>https://forum.sources.ru/index.php?showtopic=426483&amp;view=findpost&amp;p=3862302</link>
        <description><![CDATA[ROLpogo: Всем спасибо, решение найдено.]]></description>
        <author>ROLpogo</author>
        <category>.NET: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=426483&amp;view=findpost&amp;p=3862286</guid>
        <pubDate>Thu, 31 Mar 2022 12:44:06 +0000</pubDate>
        <title>Как организовать LINQ Left Join с тремя таблицами?</title>
        <link>https://forum.sources.ru/index.php?showtopic=426483&amp;view=findpost&amp;p=3862286</link>
        <description><![CDATA[ROLpogo: Вот рабочий пример, как организовать Left Join для одной таблицы (City).<br>
<br>
Эквивалент sql запроса:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">select</div><div class="code_line">&nbsp;&nbsp;cl.Name as clientName,</div><div class="code_line">&nbsp;&nbsp;ci.Name as cityName</div><div class="code_line">from Client cl</div><div class="code_line">&nbsp;&nbsp;left join City ci on ci.ID = cl.CityID</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">using System;</div><div class="code_line">using System.Collections.Generic;</div><div class="code_line">using System.Linq;</div><div class="code_line">&nbsp;</div><div class="code_line">namespace TestLinq</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;class Program</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Client</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public int ID;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public string Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public int ?CityID;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class City</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public int ID;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public string Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public int ?RegionID;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class Region</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public int ID;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;public string Name;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public static List&#60;Client&#62; GetClients()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return new List&#60;Client&#62;()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Client {ID = 1, Name = &quot;Client A&quot;, CityID = 1 },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Client {ID = 2, Name = &quot;Client B&quot;, CityID = 2 },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Client {ID = 3, Name = &quot;Client C&quot;, CityID = null },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Client {ID = 4, Name = &quot;Client D&quot;, CityID = 2 }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public static List&#60;City&#62; GetCities()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return new List&#60;City&#62;()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new City {ID = 1, Name = &quot;City A&quot;, RegionID = 1 },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new City {ID = 2, Name = &quot;City B&quot;, RegionID = 3 },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new City {ID = 3, Name = &quot;City C&quot;, RegionID = null },</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new City {ID = 4, Name = &quot;City D&quot;, RegionID = 3 }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public static List&#60;Region&#62; GetRegions()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return new List&#60;Region&#62;()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Region {ID = 1, Name = &quot;Region A&quot;},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Region {ID = 2, Name = &quot;Region B&quot;},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Region {ID = 3, Name = &quot;Region C&quot;},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;new Region {ID = 4, Name = &quot;Region D&quot;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;static void Main(string[] args)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var result =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from clients in GetClients()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;join cities in GetCities() on clients.CityID equals cities.ID into clientCityGroup</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;from subCities in clientCityGroup.DefaultIfEmpty()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;select new { clientName = clients.Name, cityName = subCities?.Name };</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;foreach (var current in result)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Console.WriteLine($&quot;{current.clientName} из города {current?.cityName}&quot;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Console.ReadKey();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Вопрос: как организовать Left Join в LINQ для двух таблиц (City, Region)?<br>
<br>
Эквивалент sql запроса:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">select</div><div class="code_line">&nbsp;&nbsp;cl.Name as clientName,</div><div class="code_line">&nbsp;&nbsp;ci.Name as cityName,</div><div class="code_line">&nbsp;&nbsp;rg.Name as regionName</div><div class="code_line">from Client cl</div><div class="code_line">&nbsp;&nbsp;left join City ci &nbsp; on ci.ID = cl.CityID</div><div class="code_line">&nbsp;&nbsp;left join Region rg on rg.ID = ci.RegionID</div></ol></div></div></div></div>]]></description>
        <author>ROLpogo</author>
        <category>.NET: Базы данных</category>
      </item>
	
      </channel>
      </rss>
	