Code First и Linq to EF на примере 1С версии 7.7 и 8.3
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.08.15 16:44
Оценка:
Выложил статьи
Code First и Linq to EF на примере 1С версии 7.7 и 8.3 часть I
Code First и Linq to EF на примере 1С версии 8.3 часть II
Linq to EF. Практика использования. Часть III
Linq to ODATA
.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
и солнце б утром не вставало, когда бы не было меня
Отредактировано 12.11.2015 12:36 Serginio1 . Предыдущая версия . Еще …
Отредактировано 12.11.2015 12:31 Serginio1 . Предыдущая версия .
Отредактировано 12.11.2015 12:31 Serginio1 . Предыдущая версия .
Отредактировано 12.11.2015 12:20 Serginio1 . Предыдущая версия .
Re: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.15 06:08
Оценка:
В Linq нет прямого left join , а так же соединение по неравенству
Но в Linq можно использовать коррелирующие запросы http://rsdn.ru/forum/dotnet/6160765.flat
Автор: Serginio1
Дата: 27.08.15

которые внутри используют OUTER APPLY
Вопрос планы запросов я посмотрю в понедельник, но может у кого то уже имеется опыт сравнения left join vs outer apply?
и солнце б утром не вставало, когда бы не было меня
Re[2]: left join vs outer apply
От: Olaf Россия  
Дата: 29.08.15 18:15
Оценка: 15 (1)
Здравствуйте, Serginio1, Вы писали:

S> В Linq нет прямого left join , а так же соединение по неравенству

S>Но в Linq можно использовать коррелирующие запросы http://rsdn.ru/forum/dotnet/6160765.flat
Автор: Serginio1
Дата: 27.08.15

S>которые внутри используют OUTER APPLY
S>Вопрос планы запросов я посмотрю в понедельник, но может у кого то уже имеется опыт сравнения left join vs outer apply?

Правильный ответ на вопрос можно получить только посмотрев план запроса, т.к. простой заменой одного выражения на другое не удастся создать логически эквивалентные запросы. Поэтому многое будет зависеть от реализации этих эквивалентов, плюс свое влияние окажет схема данных и сами данные как например в сравнении JOIN и CROSS APPLY
Автор: Olaf
Дата: 08.05.15
.
На базе AdventureWorks2008R2 я попытался написать два запроса с использованием left join и outer apply по аналогии с вашим SQL запросом:

/*1*/
select * 
from Sales.SalesOrderHeader h
left join 
(
    select top 1 with ties d1.SalesOrderID, d1.OrderQty
    from Sales.SalesOrderDetail d1
    order by row_number() over(partition by d1.SalesOrderID order by d1.OrderQty desc)
) d on h.SalesOrderID = d.SalesOrderID

/*2*/
select * 
from Sales.SalesOrderHeader h
outer apply
(
    select top 1 d1.SalesOrderID, d1.OrderQty
    from Sales.SalesOrderDetail d1
    where d1.SalesOrderID = h.SalesOrderID
    order by d1.OrderQty desc
) d

Результат:

Query 1: Query cost (relative to the batch): 3%
Query 2: Query cost (relative to the batch): 97%

Т.е. запрос с outer apply в моем случае показал себя совсем не с лучшей стороны.
Re[3]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.15 19:29
Оценка:
Здравствуйте, Olaf, Вы писали:



O>[sql]

O>/*1*/
O>select *
O>from Sales.SalesOrderHeader h
O>left join
O>(
O> select top 1 with ties d1.SalesOrderID, d1.OrderQty
O> from Sales.SalesOrderDetail d1
O> order by row_number() over(partition by d1.SalesOrderID order by d1.OrderQty desc)
O>) d on h.SalesOrderID = d.SalesOrderID

Большое спасибо. Кстати вот работая с 1С совсем от жизни отстал. Например мне 1 часть твоего ответа
в http://rsdn.ru/forum/db/6043892.flat
Автор: MasterMind
Дата: 11.05.15

понятна
а вот по второму, нужно понимать, что select top 1 with ties возьмет только по первой строке из партиции?
https://msdn.microsoft.com/ru-ru/library/ms189463(v=SQL.120).aspx

WITH TIES
Используется, если требуется вернуть две или более строки, которые совместно занимают последнее место в ограниченном результирующем наборе. Требуется использовать с предложением ORDER BY. WITH TIES может привести к тому, что вернется строк больше, чем указано в значении expression. Например, если expression имеет значение 5, но еще 2 строки соответствуют значениям в столбцах ORDER BY в строке 5, то результирующий набор будет содержать 7 строк.
Предложение TOP...WITH TIES может быть задано только в инструкциях SELECT, и только если указано предложение ORDER BY. Порядок возврата связанных записей произволен. ORDER BY не влияет на это правило.


Понял вернет все записи по 1 row_number()
Спасибо не знал.

А как например по top (3)

Кстати решал аналогичную задачу с предварительным индексированием.
http://www.forum.mista.ru/topic.php?id=564849#40

Кстати интересно если SalesOrderDetail загрузить в темповую таблицу, проиндексировать, а затем выполнить к ней запрс

select * 
from Sales.SalesOrderHeader h
outer apply
(
    select top 1 d1.SalesOrderID, d1.OrderQty
    from #TempSalesOrderDetail d1
    where d1.SalesOrderID = h.SalesOrderID
    order by d1.OrderQty desc
) d
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.08.2015 21:09 Serginio1 . Предыдущая версия . Еще …
Отредактировано 29.08.2015 20:01 Serginio1 . Предыдущая версия .
Отредактировано 29.08.2015 19:51 Serginio1 . Предыдущая версия .
Re[3]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.08.15 21:33
Оценка:
Здравствуйте, Olaf, Вы писали:

Кстати меня даже больше интересует именно как будет отображаться линковский запрос например при условии неравенства
Например
from a in aa
 select new (a=a, b=(
  select b from bb where a.id=b.id && a.Price<b.price
   select b)
)
и солнце б утром не вставало, когда бы не было меня
Отредактировано 30.08.2015 6:15 Serginio1 . Предыдущая версия .
Re[2]: left join vs outer apply
От: IT Россия linq2db.com
Дата: 30.08.15 04:48
Оценка: 10 (1)
Здравствуйте, Serginio1, Вы писали:

S> В Linq нет ... соединение по неравенству


Попробуй

from t1 in Table1
from t2 in Table2.Where(t => t.Field1 != t1.Field2)
...
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.08.15 06:17
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Serginio1, Вы писали:


S>> В Linq нет ... соединение по неравенству


IT>Попробуй


IT>
IT>from t1 in Table1
IT>from t2 in Table2.Where(t => t.Field1 != t1.Field2)
IT>...
IT>


Большое спасибо!
Прошу прощения имел ввиду левое соединение.

Хотя можно объединить два запроса
query=from t1 in Table1
from t2 in Table2.Where(t => t.Field1 != t1.Field2)
Select t1,t2

query=from t1 in Table1
  join item in query
            on t1.Key equals item.t1.Key into outer
        from itemO in outer.DefaultIfEmpty()
        select new {t1, item.t2};
и солнце б утром не вставало, когда бы не было меня
Отредактировано 30.08.2015 7:03 Serginio1 . Предыдущая версия . Еще …
Отредактировано 30.08.2015 6:28 Serginio1 . Предыдущая версия .
Re[3]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.08.15 07:44
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Serginio1, Вы писали:


S>> В Linq нет ... соединение по неравенству


IT>Попробуй


IT>
IT>from t1 in Table1
IT>from t2 in Table2.Where(t => t.Field1 != t1.Field2)
IT>...
IT>


Кстати посмотрел http://www.dotnet-tricks.com/Tutorial/linq/UXPF181012-SQL-Joins-with-C
Там при коррелирующим запросе идет Left Join

GROUP JOIN
Whene a join clause use an INTO expression, then it is called a group join. A group join produces a sequence of object arrays based on properties equivalence of left collection and right collection. If right collection has no matching elements with left collection then an empty array will be produced.
C# Code
 var q=(from pd in dataContext.tblProducts
 join od in dataContext.tblOrders on 
 pd.ProductID equals od.ProductID into t orderby pd.ProductID
 select new
 {
 pd.ProductID,
 pd.Name,
 pd.UnitPrice,
 Order=t
 }).ToList();



Генерится левое соединение.
и солнце б утром не вставало, когда бы не было меня
Re[4]: left join vs outer apply
От: IT Россия linq2db.com
Дата: 30.08.15 17:22
Оценка: 15 (1)
Здравствуйте, Serginio1, Вы писали:

S>Большое спасибо!

S> Прошу прощения имел ввиду левое соединение.

from t1 in Table1
from t2 in Table2.Where(t => t.Field1 != t1.Field2).DefaultIfEmpty()
...
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: left join vs outer apply
От: IT Россия linq2db.com
Дата: 30.08.15 17:35
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>GROUP JOIN


Прямого аналога GroupJoin в SQL нет. Для получения аналога нужно генерировать либо избыточный запрос, либо несколько запросов.

S>Генерится левое соединение.


Поэтому в сгенерированном коде может быть всё, что угодно и меняться от версии к версии LINQ провайдера.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 30.08.15 17:36
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Serginio1, Вы писали:


S>>Большое спасибо!

S>> Прошу прощения имел ввиду левое соединение.

IT>
IT>from t1 in Table1
IT>from t2 in Table2.Where(t => t.Field1 != t1.Field2).DefaultIfEmpty()
IT>...
IT>


Огромнейшее спасибо!
и солнце б утром не вставало, когда бы не было меня
Re[2]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 08:36
Оценка:
Здравствуйте, Serginio1, Вы писали:

Вот какие левые запросы с условием на неравенство получились

var бд = Константы1С.ГлобальныйКонтекст.БД;

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



            foreach (var элем in qr.Take(1000)) 
            { 

                if (элем.ШтрихКод == null)
                    continue;

                Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), элем.ШтрихКод == null ? "null" : элем.ШтрихКод, элем.ПолнНаименование.TrimEnd(), элем.ОКЕИ == null ? "null" : элем.ОКЕИ);


            }

Выдает такой запрос
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]


Или больше мне нравится таой запрос

var бд = Константы1С.ГлобальныйКонтекст.БД;
            var qr = from Номенклатура in бд.Спр_Номенклатура

                     select new
                     {
                         Номенклатура.Наименование,
                         Номенклатура.ПолнНаименование,
                         Единицы = (Номенклатура.ПодчиненныеЕдиницы.Where(единица => единица.ШтрихКод.CompareTo("4") > 0)
                         .Select(единица =>

                         new
                         {
                             единица.ШтрихКод,
                             ОКЕИ = единица.ОКЕИ.Наименование
                         }
            )
                         )
                     };


            foreach (var элем in qr.Take(1000))
            {


                foreach (var единица in элем.Единицы)
                    Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), единица.ШтрихКод, элем.ПолнНаименование.TrimEnd(), единица.ОКЕИ);


            }

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


SELECT 



    [Project2].[ID] AS [ID], 
    [Project2].[C1] AS [C1], 
    [Project2].[DESCR] AS [DESCR], 
    [Project2].[SP101] AS [SP101], 
    [Project2].[C2] AS [C2], 
    [Project2].[SP80] AS [SP80], 
    [Project2].[DESCR1] AS [DESCR1]
    FROM ( SELECT 
        [Limit1].[ID] AS [ID], 
        [Limit1].[DESCR] AS [DESCR], 
        [Limit1].[SP101] AS [SP101], 
        [Limit1].[C1] AS [C1], 
        [Join1].[SP80] AS [SP80], 
        [Join1].[DESCR] AS [DESCR1], 
        CASE WHEN ([Join1].[PARENTEXT] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C2]
        FROM   (SELECT TOP (1000) 
            [Extent1].[ID] AS [ID], 
            [Extent1].[DESCR] AS [DESCR], 
            [Extent1].[SP101] AS [SP101], 
            1 AS [C1]
            FROM [dbo].[SC84] AS [Extent1] ) AS [Limit1]
        LEFT OUTER JOIN  (SELECT [Extent2].[PARENTEXT] AS [PARENTEXT], [Extent2].[SP80] AS [SP80], [Extent3].[DESCR] AS [DESCR]
            FROM  [dbo].[SC75] AS [Extent2]
            INNER JOIN [dbo].[SC41] AS [Extent3] ON [Extent2].[SP79] = [Extent3].[ID] ) AS [Join1] ON ([Limit1].[ID] = [Join1].[PARENTEXT]) AND ([Join1].[SP80] > N'4')
    )  AS [Project2]
    ORDER BY [Project2].[ID] ASC, [Project2].[C2] ASC
и солнце б утром не вставало, когда бы не было меня
Re: Code First и Linq to EF на примере 1С версии 7.7
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 09:06
Оценка:
Здравствуйте, Serginio1, Вы писали:


var Запрос = qr.CreateQuery<Справочник.Номенклатура>("Select p From Спр_Номенклатура as p");

            foreach (var элем in Запрос)
            {
                Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), элем.Артикул, элем.ПолнНаименование.TrimEnd());
            }

Вот такую ошибку выдает



CreateQuery Простой идентификатор "Спр_Номенклатура" должен содержать только основные символы латиницы.
Для символов UNICODE следует использовать экранированный идентификатор

и солнце б утром не вставало, когда бы не было меня
Re[2]: Code First и Linq to EF на примере 1С версии 7.7
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 09:48
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:



S>
S>var Запрос = qr.CreateQuery<Справочник.Номенклатура>("Select p From Спр_Номенклатура as p");

S>            foreach (var элем in Запрос)
S>            {
S>                Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), элем.Артикул, элем.ПолнНаименование.TrimEnd());
S>            }
S>

S>Вот такую ошибку выдает



S>

S>CreateQuery Простой идентификатор "Спр_Номенклатура" должен содержать только основные символы латиницы.
S>Для символов UNICODE следует использовать экранированный идентификатор


Попробовал перекодировать в символы Юникоде

public string ПерекодироватьЮникоде(string Запрос)
        {

            var sb = new StringBuilder();

            foreach (var слово in Запрос)
            {
                if (((int)слово) < 128)
                    sb.Append(слово);
                else
                    sb.AppendFormat(@"\u{0}", ((int)слово).ToString("X4"));
                  
            }


Ругается "Недопустимый синтаксис запроса., строка 1, столбец 15
Строка такая

Select p From \u0421\u043F\u0440_\u041D\u043E\u043C\u0435\u043D\u043A\u043B\u0430\u0442\u0443\u0440\u0430 as p

и солнце б утром не вставало, когда бы не было меня
Отредактировано 31.08.2015 10:44 Serginio1 . Предыдущая версия .
Re[4]: left join vs outer apply
От: Olaf Россия  
Дата: 31.08.15 10:40
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Большое спасибо. Кстати вот работая с 1С совсем от жизни отстал. Например мне 1 часть твоего ответа

S>в http://rsdn.ru/forum/db/6043892.flat
Автор: MasterMind
Дата: 11.05.15

S>понятна
S> а вот по второму, нужно понимать, что select top 1 with ties возьмет только по первой строке из партиции?
S>https://msdn.microsoft.com/ru-ru/library/ms189463(v=SQL.120).aspx

S>

S>WITH TIES
S>Используется, если требуется вернуть две или более строки, которые совместно занимают последнее место в ограниченном результирующем наборе. Требуется использовать с предложением ORDER BY. WITH TIES может привести к тому, что вернется строк больше, чем указано в значении expression. Например, если expression имеет значение 5, но еще 2 строки соответствуют значениям в столбцах ORDER BY в строке 5, то результирующий набор будет содержать 7 строк.
S>Предложение TOP...WITH TIES может быть задано только в инструкциях SELECT, и только если указано предложение ORDER BY. Порядок возврата связанных записей произволен. ORDER BY не влияет на это правило.


S> Понял вернет все записи по 1 row_number()

S>Спасибо не знал.

Все верно. Конструкция вида select top 1 with ties ... from ... order by row_number() over(partition by ... order by ...) позволяет извлечь для каждого раздела (partition) по одной записи. Причем, какая именно запись попадет в выборку, определяется порядком сортировки в оконной функции row_number()

S>А как например по top (3)


Что касается top n with ties, где n > 0 и в случае использования выражения сортировки отличного от оконной функции, то можно рассмотреть пример, где первый запрос – непосредственное использование top with ties, а второй запрос – альтернативная реализация. Фактически top n with ties сводится к упорядочению данных по выражению/полю указанному в order by и выбору ВСЕХ значений, совпадающих с первыми n записями выражения/поля сортировки.
declare @n int = 1

if object_id('tempdb..#t') is not null
    drop table #t

create table #t(n int)

insert into #t
select 1 as n union all
select 1 union all
select 1 union all
select 1 union all
select 2 union all
select 2 union all
select 2 union all
select 3 union all
select 3

-- Запрос с top with ties
select top(@n) with ties * 
from #t
order by n desc

-- Замена запроса с top with ties
select * 
from #t
where n in (select top(@n) n from #t order by n desc)
order by n desc

Для @n in (1,2) вернутся значения 3,3
Для @n in (3,4,5) вернутся 3,3,2,2,2
Для @n in (6,7,8,9) вернутся значения 3,3,2,2,2,1,1,1,1
Re[4]: left join vs outer apply
От: Olaf Россия  
Дата: 31.08.15 10:41
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Кстати меня даже больше интересует именно как будет отображаться линковский запрос например при условии неравенства

S>Например
S>
S>from a in aa
S> select new (a=a, b=(
S>  select b from bb where a.id=b.id && a.Price<b.price
S>   select b)
S>)
S>

Запрос можно конечно посмотреть через LinqPad, но как правильно здесь уже заметили, реализация может меняться при смене Linq провайдера.
Re[5]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 10:47
Оценка:
Здравствуйте, Olaf, Вы писали:

O>Здравствуйте, Serginio1, Вы писали:


S>> Кстати меня даже больше интересует именно как будет отображаться линковский запрос например при условии неравенства

S>>Например
S>>
S>>from a in aa
S>> select new (a=a, b=(
S>>  select b from bb where a.id=b.id && a.Price<b.price
S>>   select b)
S>>)
S>>

O>Запрос можно конечно посмотреть через LinqPad, но как правильно здесь уже заметили, реализация может меняться при смене Linq провайдера.

Спасибо. Я уже поэкспериментировал с разными вариантами
http://rsdn.ru/forum/dotnet/6163878.1
Автор: Serginio1
Дата: 31.08.15
и солнце б утром не вставало, когда бы не было меня
Re[5]: left join vs outer apply
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 10:54
Оценка:
Здравствуйте, Olaf, Вы писали:
Спасибо я мел ввиду tier очень интересное решение
Кстати лучше наверное как у тебя в http://rsdn.ru/forum/db/6085704.1
Автор: Olaf
Дата: 19.06.15


Только соединение по
select *
from
(
    select mh.*, row_number() over(partition by mh.Mess_ID order by mh.Date desc, mh.Time desc) as n
    from dbo.MessageHists mh
    where mh.Founder_date < @StartDate
) a
where a.n <= n


Это близкий аналог с tier
и солнце б утром не вставало, когда бы не было меня
Re: Code First и Linq to EF на примере 1С версии 7.7
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 15:02
Оценка:
Здравствуйте, Serginio1, Вы писали:


S> Например хотел прикрутить CreateQuery. Вернее прикрутил, и действительно можно использовать псевдонимы таблиц и полей, но проблема была с Юникодом.

S>И решил не заморачиваться.
S> Буду благодарен, на полезные ссылки и мнения.
Прикрутил. Вот таким образом


var str = @"Select p.[Наименование],p.[Код],p.[ПолнНаименование] From [Спр_Номенклатура] as p";
           var Запрос = qr.CreateQuery<dynamic>(str );


Интересно работает он с temporary Table?
и солнце б утром не вставало, когда бы не было меня
Re[2]: Code First и Linq to EF на примере 1С версии 7.7
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.08.15 17:58
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Serginio1, Вы писали:



S>> Например хотел прикрутить CreateQuery. Вернее прикрутил, и действительно можно использовать псевдонимы таблиц и полей, но проблема была с Юникодом.

S>>И решил не заморачиваться.
S>> Буду благодарен, на полезные ссылки и мнения.
S> Прикрутил. Вот таким образом


S>
S>var str = @"Select p.[Наименование],p.[Код],p.[ПолнНаименование] From [Спр_Номенклатура] as p";
S>           var Запрос = qr.CreateQuery<dynamic>(str );
S>


S> Интересно работает он с temporary Table?

К сожалению нет

Отличия Entity SQL и Transact-SQL

Идентификаторы
В языке Transact-SQL сравнение идентификаторов всегда осуществляется с учетом параметров сортировки текущей базы данных. В Entity SQL идентификаторы всегда чувствительны к регистру и диакритическим знакам (то есть Entity SQL различает диакритические знаки, например «а» отличается от «ấ»). Entity SQL обрабатывает версии букв, которые кажутся такими же, но являются другими символами и происходят из других кодовых страниц. Для получения дополнительной информации см. Набор символов ввода (Entity SQL).
Функциональность Transact-SQL, недоступная в Entity SQL
Следующая функциональность Transact-SQL недоступна в языке Entity SQL.
DML
В настоящее время язык Entity SQL не поддерживает инструкции DML (вставка, обновление, удаление).
DDL
Текущая версия Entity SQL не поддерживает DDL.
Командное программирование
Язык Entity SQL не поддерживает командное программирование в отличие от Transact-SQL. Используйте вместо этого языки программирования.
Функции группирования
Язык Entity SQL пока не поддерживает функции группирования (например, CUBE, ROLLUP и GROUPING_SET).
Функции аналитики
Язык Entity SQL не предоставляет (пока) поддержку функций аналитики.
Встроенные функции, операторы
Язык Entity SQL поддерживает подмножество встроенных функций и операторов Transact-SQL. Вероятно, эти операторы и функции будут реализованы ведущими поставщиками хранилищ. В языке Entity SQL используются специальные функции для хранилищ, объявленные в манифесте поставщика. Кроме того, модель Entity Framework позволяет объявлять встроенные и пользовательские функции хранилища для использования в Entity SQL.
Подсказки
Язык Entity SQL не предоставляет механизм подсказок в запросах.
Пакетирование результатов запроса
Entity SQL не поддерживает пакетирование результатов запросов. Например, допустим следующий запрос Transact-SQL (отправляемый как пакет):
select * from products;
select * from catagories;
Однако эквивалент Entity SQL не поддерживается.
Select value p from Products as p;
Select value c from Categories as c;
Entity SQL поддерживает только запросы, которые выдают один результат на одну команду.

и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.