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

в любом случае спасибо за прямые ссылки
4 Кирпич
 
10.07.20
15:41
Щас придет
5 Garykom
 
гуру
10.07.20
15:51
В пятницу?
6 Serginio1
 
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]
7 Serginio1
 
11.07.20
12:23
Ну и опят же

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