Вход | Регистрация
 
Информационные технологии :: Математика и алгоритмы

C#: про LINQ и outer join

C#: про LINQ и outer join
Я
   Ненавижу 1С
 
10.07.20 - 14:51
Я знаю тут сварщики универсальные. Есть и знающие .Net
Есть пара вопросов на подумать про LINQ:
1. какие ограничения не позволили в LINQ завезти left/full outer join?
2. почему не сделали произвольный предикат соединения коллекций, а не только эквивалентность ключей?
   Garykom
 
1 - 10.07.20 - 15:03
   Garykom
 
2 - 10.07.20 - 15:04
   Ненавижу 1С
 
3 - 10.07.20 - 15:14
(1) знаю, но как-то криво что-ли, а может дело привычки
(2) то есть произвольное условие с компаратором, ну тоже не айс, тем более как оно в IQueryable будет для Linq to SQL?

в любом случае спасибо за прямые ссылки
   Кирпич
 
4 - 10.07.20 - 15:41
Щас придет
   Garykom
 
5 - 10.07.20 - 15:51
В пятницу?
   Serginio1
 
6 - 11.07.20 - 12:15
В первом же примере статьи http://catalog.mista.ru/public/402433/
Приведу несколько примеров левого соединения с условием неравенства.
Суть запроса в левом соединении Номенкладуры и подчиненных единиц при условии, что Штрих-код начинается с «4»



            var qr = from Номенклатура in бд.Спр_Номенклатура
                     from единицы in бд.Спр_Единицы.Where(единица => единица.ВладелецId == Номенклатура.ID && единица.ШтрихКод.CompareTo("4") > 0).DefaultIfEmpty()
                     select new
                     {
                         Номенклатура.Наименование,
                         Номенклатура.ПолнНаименование,
                         единицы.ШтрихКод,
                         ОКЕИ = единицы.ОКЕИ.Наименование
                     };

Генерирует такой запрос


SELECT
    [Limit1].[C1] AS [C1],
    [Limit1].[DESCR] AS [DESCR],
    [Limit1].[SP101] AS [SP101],
    [Limit1].[SP80] AS [SP80],
    [Limit1].[DESCR1] AS [DESCR1]
    FROM ( SELECT TOP (1000)
        [Extent1].[DESCR] AS [DESCR],
        [Extent1].[SP101] AS [SP101],
        [Extent2].[SP80] AS [SP80],
        [Extent3].[DESCR] AS [DESCR1],
        1 AS [C1]
        FROM   [dbo].[SC84] AS [Extent1]
        LEFT OUTER JOIN [dbo].[SC75] AS [Extent2] ON ([Extent2].[PARENTEXT] = [Extent1].[ID]) AND([Extent2].[SP80] > N'4')
        LEFT OUTER JOIN [dbo].[SC41] AS [Extent3] ON [Extent2].[SP79] = [Extent3].[ID]
    )  AS [Limit1]
   Serginio1
 
7 - 11.07.20 - 12:23
Ну и опят же

https://habr.com/ru/post/504854/
   Ненавижу 1С
 
8 - 11.07.20 - 12:29
(7) это читал, опять же оно годится только для LINQ to Object
(6) а вот тут надо изучить, но сбивает столку другой синтаксис, отличный от SQL
   Serginio1
 
9 - 11.07.20 - 12:29
   Ненавижу 1С
 
10 - 11.07.20 - 12:33
(9) вот! все таки кто-то сделал "Using "LeftJoin" function"
   Serginio1
 
11 - 11.07.20 - 12:35
(8) Ну Linq не совсем SQL. Его проще читать и создавать чем чистый SQL.
Но плата конечно это универсальность. Но в EF можно и чистый SQL использовать или ХП
(10) Но это как понимаю только  для Linq2Db.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.