Имя: Пароль:
1C
1C 7.7
v7: Code First и Linq to EF на примере 1С версии 7.7
Ø (Волшебник 04.09.2015 10:55)
0 Serginio1
 
28.08.15
20:04
Выоложил стать на
http://catalog.mista.ru/public/393228/

Если будут вопросы задавайте.
1 Злопчинский
 
28.08.15
20:07
вот ты мне как тупому 1С-программиситу поясни - для чего это все? профиты в чем при автоматизации?
2 Sserj
 
28.08.15
20:12
(1) Тут профит в том что понапишешь всякой лабудени, а потом заказчик сможет от тебя отказаться только при очень-очень-очень-очень большом желании
:)
3 Serginio1
 
28.08.15
20:19
(1) На Linq значительно удобнее писать запросы. Например для сложного запроса есть повторяющися код, или его нужно использовать как подзапрос. Обычно используют склейку кода. На Linq ты можешь использовать повторно запросы. Например

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

//Определили запрос, где учавствуют таблицы и условия


            var query = from Константа in бд.ТаблицаКонстанты
                         where Константа.ID == 9697
                         orderby Константа.DATE descending, Константа.TIME descending, Константа.DOCID descending, Константа.ROW_ID descending
                         select Константа;
                //         select new Константы1С.ЗначениеПериодического { Значение = Константа.VALUE }).Take(1);


// А в этом запросе мы испльзуем его, же но добавляем еще условия
            var query2= (from спр in бд.Спр_ДляПериодических
                            selectnew
                            {
                                Наименование=спр.Наименование,
                                ДатаСпр=спр.ДатаСпр,
                                Периодические=(from прериод in  query.Where(х=> х.OBJID==спр.ID && х.DATE<=спр.ДатаСпр).Take(1)
                                                   selectnew
                                                   {
                                                      Значение=прериод.VALUE,
                                                       Дата=прериод.DATE
                                                  
                                                   }).FirstOrDefault()

                            }
                             );
4 Serginio1
 
28.08.15
20:25
Да и еще нужно заметить, что при написании такого запроса идет подсказка через точку контроль ошибок на этапе написания запроса. Если честно, я от Linq в полном восторге. Я даже не ожидал от него такой мощи.
5 Asmody
 
28.08.15
20:32
Запросы эффективно писать на чистом SQL. А как надо три связанных таблички на форму положить, так вся хваленая "мощь" .NET разом сдуваеся.
6 Serginio1
 
28.08.15
20:50
(5) Да ну? Не ужто ты начал писать на C#. Или сам не пробовал, но осуждаю. Я тебе приводил результирующие запросы. Все течет, все меняется. Кстати на Linq можно писать и в стиле 1С 8. Например http://msdn.microsoft.com/ru-ru/magazine/hh781018.aspx

string entitySQL = " SELECT p, p.Filling " +
"FROM PartyContext.Pinatas AS p "
"WHERE p.Filling.Description='Candy'";
var query=context.CreateQuery<DbDataRecord>(entitySQL);
query.MergeOption = System.Data.Objects.MergeOption.NoTracking;
var pinatasWithFilling=query.ToList();

Я пробовал работал псевдонимы таблиц и полей но только на латинице. С Юникодом возникли проблемы. Но может в дальнейшем узнаю как победить
7 Serginio1
 
28.08.15
20:54
(5) Кстати о мифах о тормозах http://habrahabr.ru/post/230623/
8 Serginio1
 
28.08.15
20:59
Еще есть можно использовать
System.Data.SqlClient.SqlBulkCopy — класс из состава ADO.NET, предназначенный для записи большого объема данных в таблицы SQL Server. В качестве источника данных может принимать DataRow[], DataTable, либо реализацию IDataReader.

http://habrahabr.ru/post/251397/
9 Serginio1
 
28.08.15
21:06
Да еще же куча асинхронных методов
https://msdn.microsoft.com/en-us/data/jj819165.aspx
var blogs = await (from b in db.Blogs
                            orderby b.Name
                            select b).ToListAsync();

                // Write all blogs out to Console
                Console.WriteLine("Query completed with following results:");
                foreach (var blog in blogs)
                {
                    Console.WriteLine(" - " + blog.Name);
10 Serginio1
 
28.08.15
21:09
11 Serginio1
 
28.08.15
22:28
12 Злопчинский
 
28.08.15
23:39
(3) это всего лишь "помогалка", причем несущественная
13 Serginio1
 
28.08.15
23:42
(12) Так покажи этот запрос на 1С?
А помогалка весьма существенная.
Вот реальный SQL код генерящийся из 3

Здесь мечта каждого программиста на 8 ке и 7 ке выполняет следующий код

SELECT
    1 AS [C1],
    [Extent1].[DESCR] AS [DESCR],
    [Extent1].[SP9700] AS [SP9700],
    [Limit1].[ROW_ID] AS [ROW_ID],
    [Limit1].[VALUE] AS [VALUE],
    [Limit1].[DATE] AS [DATE]
    FROM  [dbo].[SC9691] AS [Extent1]
    OUTER APPLY  (SELECT TOP (1) [Project1].[ROW_ID] AS [ROW_ID], [Project1].[DATE] AS [DATE], [Project1].[VALUE] AS [VALUE]
        FROM ( SELECT
            [Extent2].[ROW_ID] AS [ROW_ID],
            [Extent2].[DATE] AS [DATE],
            [Extent2].[VALUE] AS [VALUE],
            [Extent2].[DOCID] AS [DOCID],
            [Extent2].[TIME] AS [TIME]
            FROM [dbo].[_1SCONST] AS [Extent2]
            WHERE (9697 = [Extent2].[ID]) AND ([Extent2].[OBJID] = [Extent1].[ID]) AND ([Extent2].[DATE] <= [Extent1].[SP9700])
        )  AS [Project1]
        ORDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID] DESC ) AS [Limit1]
14 Serginio1
 
29.08.15
00:00
На самом деле по возможностям Linq значительно превосходит запросы 1С.
15 igork1966
 
29.08.15
00:03
(14) и левые соединения через ж@пу
16 Asmody
 
29.08.15
00:09
(14) Формочку с тремя табличками нарисуй.
А "возможности" .NET для работы с БД мы еще лет 10 назад изучили. С 7.7 работало прекрасно, со всякими отборами и прочими бантиками. Правда только "для чтения". Ну и вьюшек своих пришлось в базе накрутить, чтобы многоэтажных запросов не строить. Зато на дальнем складе в МО через тогдашний gprs был честный онлайн.
17 Serginio1
 
29.08.15
00:14
(16) Еще раз я не говорю, что Linq это панацея, я говорю льшь о том, что стоит изучить то, чего не знаешь на знакомой для тебя базе. А проблемы с ьремя табличками я так и не понял?
18 Serginio1
 
29.08.15
00:15
(15) Да через одно место, но можно это решать через расшерители.
Кстати в понедельник попробую коррелирующий запрос (аналог 3), но с простым условием соединения

http://www.codeproject.com/Articles/22342/LINQ-Challenges-and-SQL-Server-Compact-Edition
19 Serginio1
 
29.08.15
00:21
(16) 10 лет назад не было ни Linq, ни Code First.
Кстати в ней присутствует миграция
https://msdn.microsoft.com/ru-ru/data/jj554735

А накрутить и сейчас на 1С++ все можно. Я просто предлагаю посмотреть на другие возможности и поиграться на известных для тебя базах. Не хочешь не пробуй. За Linq и их подобными будущее.
20 Asmody
 
29.08.15
00:29
А Linq - ну Linq - еще один DSL. В современном мире разве этим кого удивишь? Есть, например, squeryl. Или korma.
Или тебя восхищают возможности C# как функционального языка? После scala с akka C# вообще не прет :)
21 Asmody
 
29.08.15
00:35
(17) Да задачка у меня была: три связанных таблички на форме, одна главная, две дочерних. Редактируемые, ну и чтоб с полями постановки, которые и руками заполнить, и из списка выбрать, и минимальным поиском. Потыкался я недельку во всю "мощь" обеих Enterprise-платформ, да и накидал за полдня в 1С.
22 Asmody
 
29.08.15
00:38
Из всего "богатства" .NET, только LightSwitch выглядит подходящим и адекватным по простоте для таких задач. Да и у него возникли несокрушимые проблемы с развертыванием.
23 Serginio1
 
29.08.15
00:47
(20) Нет. Но я пишу на C# и использую всю мощь Net, которой мне в 1С не хватает. А как тебе Хаскель?
C# это гибридный язык
(21) 10 лет .Net еще сыроват был. Тогда только только 2.0 с дженериками вышел. Возможно ты ещё на 1.0 пробовал. У меня на Compct Framework c DataView никаких проблем не было.
(22) К сожалению, а может быть и к счастью похоронили они Silverlight. Сейчас у них другая кроссплатформенная идея
https://xakep.ru/2015/04/09/195-windows-10/
24 Serginio1
 
29.08.15
00:51
25 Serginio1
 
29.08.15
00:55
(22) Кстати а как тебе TypeScript, Asp.Net mvc весма мощен, особенно в новой версии в том числе и кроссплатформенной
26 Masquerade
 
29.08.15
01:07
(8)
Есть расширение для EF - EF EXTENDED.

Там DELETE и UPDATE ходят не через объектную модель. И довлльно красиво.

(0)
Я решительно не понял - ты о чем? В 7.7 писать на линке?

(25)
Текущий стек в .net  для разработки весьма мощен. За исключением одного - генерация форм. Их как-то приходится писать руками и это занимает время. Как бонус - технологии для фронтенда - выбираешь сам и какие хочешь.
27 Masquerade
 
29.08.15
01:11
(0)
Но 1С-никам ты ничего выходящего за рамки конфигуратора- не продашь.

В силу определенных факторов.

1С настоящий RAD. Разработка - ураган. Поставка решений - как из пулемета.

И как бы не стонали о дороговизне программистов - дешево.

Круто, чо.

Корпоратив охвачен, на мобилы пришли. Осталось сайты делать - и дело за мировой экспансией.
28 Asmody
 
29.08.15
01:13
(23) Haskell для какой-нибудь навороченной математики. Для обычных задач вся его чистоплотность избыточна, только мешает.  Конечно, для фана потыкаться очень прикольно, чисто мозг повыворачивать.
TypeScript я не смотрел. Серверный javascript как-то не было печали писать, а на стороне браузера хватает обычного js. Или CoffeeScript.
29 Masquerade
 
29.08.15
01:15
А что до общего качества решений, но на сторону технологии можно записать:

1. Неразвитость языка в принципе.
2. Отсутствие кастомных контролов (но надо ли)
3. Нет типизации.

А все остальные минусы - следствие таких плюсов, как низкий порог вхождения - отсюда и качество решений.

Так что, где 1С влезает - то это наверное лучший выбор.
30 Masquerade
 
29.08.15
01:16
Но!

Если вложиться в разработку некоторого  framework-а:

1. Генерация форм.
2. Скелет приложения.

То все у 1С преимуществ не остается.
31 Masquerade
 
29.08.15
01:18
И еще забыл - лицензирование.

Как ни странно - порой написать своё - дешевле, чем купить готовую конфу от 1С.
32 Asmody
 
29.08.15
01:18
(29) Я вот думаю, когда разработчикам типовых надоест рисовать костыли типа Новый ОписаниеОповещения() или Выполнить(ИмяОбщегоМодуля), и они надают по головам девелоперам платформы.
33 Asmody
 
29.08.15
01:21
(30) Пфффф! 1С держится не на стеке, а на мощи типовых, туче решений и дешевизне кастомизации.
34 Masquerade
 
29.08.15
01:26
(33)

-- а на мощи типовых

Скорее на мощах.

Можно огласить дешевизну кастомизации следующего плана:

1. БП (Версию выбрать по вкусу)
2. 3000 складских документов в день.

Нужно обеспечить восстановление последовательности за месяц <2 часа.

Сейчас это >2 суток.

Итак - дешевизна кастомизации?
35 Asmody
 
29.08.15
01:30
(34) Дешевизна по сравнению с "мировыми  аналогами".
36 Злопчинский
 
29.08.15
01:35
(34) может и на мощах - но эти мощи в каждой конторе торчат. причем не мощи а МОЩЬ, а сбоку/сверху наприлеплены костылики.

автономных решений, да еще вопросизводимых активно тиражируемых - не так уж и много.

так что чем дальше тем больше типовые будут завоевывать мир.
всем чистым спецам-кодерам1С будет кирдык.
37 Злопчинский
 
29.08.15
01:37
(34) при чем здесь п.1 в совокупности п.2..?
п.1 - это учет виртуальных сущностей.
п.2 - учет реальных объектов и реальных движений, здесь вообще - говорить о восстановлении ГП каком-то - за пределами добра и зла. В складских процессах и иих отражении в СКЛАДСКОМ учете вообще нет места документам в трактовке типовых 1С-ных понятий.
38 Serginio1
 
29.08.15
01:52
(27) Я просто хотел показать пример построения объектной модели на основе Code First  Linq. Её так же просто прикрутить и к 8 ке, но тут начнут кричать про лицинзионное соглашение. Поверь у меня много разработок и они никому не нужны, за редким исключением http://catalog.mista.ru/profile/82159/public/

Но я хочу довести до людей то, чего они не знают. Да и мне самому интересно отойти от 1С и заняться программированием для души. Давно я не получал такого удовольствия.
39 Masquerade
 
29.08.15
02:07
(37)
У взрослых людей это называется хамством.
40 Злопчинский
 
29.08.15
02:45
(39) ну извините, что мое видение мира не совпало с вашим...
41 Serginio1
 
29.08.15
09:12
(20. Кстати Asmody
Для интереса скачай Visual Studio Community 2015
http://www.microsoft.com/ru-ru/softmicrosoft/vs2015Community.aspx

Обработку я тебе вышлю (ссылку не даю, потому что интересно вообще кому то это нужно и вышлю любому кто попросит)

Поиграйся. Мне честно интересно твоё мнение
42 ДенисЧ
 
29.08.15
09:49
в 1с линк не нужен
43 Serginio1
 
29.08.15
10:06
Ну 1С не нужны и Лямбды и awaitы и много многое другое, что есть в нормальных языках и которыми активно пользуются. Я предлагаю лишь попробовать, не нравится не надо.
44 Serginio1
 
29.08.15
10:29
(42) На самом деле для 1С идеальный язык это TypeScript.
В нем можно совмещать статическую и динамическую типизацию.
И на нем намного приятнее писать, чем на JS.
Кстати к JS Linq тоже прикручивают https://linqjs.codeplex.com/
45 Serginio1
 
29.08.15
10:47
А вот Linq и на TS
https://www.npmjs.com/package/linq-ts
46 Serginio1
 
29.08.15
11:58
47 igork1966
 
29.08.15
12:03
Как всегда не учитывается стоимость.
Когда придется за все это добро платить, восторги пропадут.
А для 1С это вполне подъемные деньги в отличии от...
48 Masquerade
 
29.08.15
12:22
(47)
За какое добро придется платить?
49 Serginio1
 
29.08.15
12:46
(15) Вот люди пишут расширители http://stackoverflow.com/questions/21615693/extension-method-for-iqueryable-left-outer-join-using-linq
(47) В отличие от чего?  Кстати мой пример вполне это вполне реальный пример интеграции Asp.Net и 1С, MySql.
Вообще зоопарк.
Я только получаю то, что мне 1С не может дать. Особенно 7.7.
50 Masquerade
 
29.08.15
21:59
(47)
Я так понимаю, что списка добра, за которое приходится платить неподъемные деньги - мы тут не увидим?
51 Masquerade
 
29.08.15
22:04
(49)
Лучше б написал генерацию html-формы\контроллера с тем же  bootstrap-ом, на основе EF-модели.

Чтоб с мультиселектами, табами - всеми делами.

А тащить линк в 1С, ради чего бы то не было - пустая затея.

Во первых никому не нужно,
во вторых - 1С - тормоз.
52 igork1966
 
29.08.15
22:23
(48) За не бесплатную версию Visual Studio конечно. За дополнительные расширения.
Я конечно понимаю что большинство крякают ultimate и не говоря доп.софте. Но это пока до посадок не дошло дело.
53 Masquerade
 
29.08.15
22:39
(52)
А чем бесплатная то не угодила?

И за какие "дополнительные расширения" _придется_ платить?
54 Serginio1
 
29.08.15
22:56
(51) Я не тащу Linq в 1С. Я показываю как его использовать на основе таблиц 1С. Мне например легче и понятнее экспериментировать на том, что я знаю досконально, а не какие то там искусственные базы.
(52) Скачай по ссылке в 41 бесплатную
55 igork1966
 
29.08.15
22:56
(53) Resharper, например. По-моему он он стоит у многих разработчиков... сколько из них его купили, это вопрос...
ORM далеко не бесплатны.

Но давай не будем спорить дальше я не чувствую себя достаточно в этом вопросе квалифицированным, ок?
Тем более в приложении к (0) это не существенно.
56 igork1966
 
29.08.15
22:58
(52) Это у меня уже стоит на ноуте с которого пишу. Пару раз даже использовал. :-)
57 Serginio1
 
29.08.15
23:04
А не хочешь попробовать на ней Code  First и Linq попробовать?
Кстати говоря, что новая студия как раз перекрывает все плюсы решарпера. Но для моих задач он совсем не нужен
58 igork1966
 
29.08.15
23:04
(56) => (54)
59 igork1966
 
29.08.15
23:10
(57) Когда будет немного поболее свободного времени.
Я собственно писал после 1c 8.1 на C# в основном linq-to-sql (прикладной код, у нас было разделение) после 1C 8.1. Но потом проект помер.
60 Попытка1С
 
29.08.15
23:21
Все потребности семерки уже давно перекрыты компонентой 1cpp.
Честно говоря не очень понял в чем цымус разработки из (0)
61 Serginio1
 
30.08.15
00:08
(60) Попробовать Linq на реальных данных. Кроме того, при всем моем почтении к 1С++, Linq очень удобно применять для интеграции из нетовских приложений. Например из asp.net mvs. Но мне лично было прикрутить Code First к 1С, попробовать Linq на знакомых мне данных и поделиться своими трудами с другими
62 Serginio1
 
30.08.15
00:52
61 Плюс используя наработки к семерке, достаточно просто написать Code First и к восьмерке
63 Serginio1
 
30.08.15
01:10
64 Asmody
 
30.08.15
01:36
(63) Это не так интересно. Вот если бы там pattern matching был...
65 Serginio1
 
30.08.15
01:50
(64) А разве он есть в запросах? pattern matching dвещь хорошая, но большая часть может быть реализована и через хэш таблицу.
http://habrahabr.ru/post/227935/
66 Masquerade
 
30.08.15
02:57
(63)
Case, when... Это всё для лохов.
67 Masquerade
 
30.08.15
02:58
Вот LINQ

int[] numbers = {0,10,20,30,40,50,100}; //Зададим границы

        var users = numbers.Select(x => new user( Math.Abs(x - 3))); //Генерим Юзеров

        var __n = numbers.OrderBy(x=>x).Select((x, y) => new { start = x, end = y == numbers.Count() - 1 ? numbers.Max() + numbers.Max() : numbers[y + 1]}).Select(x=> Enumerable.Range(x.start,x.end - x.start)); //Немного последовательностей

        var result = users.GroupBy(x => __n.Where(xx => xx.Contains(x.age)).FirstOrDefault().Min().ToString() +" -- "+ __n.Where(xx => xx.Contains(x.age)).FirstOrDefault().Max().ToString()).Select(x => new { desc = x.Key, users = x.Count() }); //Вычисляем результат
68 Masquerade
 
30.08.15
02:58
Весь текст
69 Masquerade
 
30.08.15
02:59
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        int[] numbers = {0,10,20,30,40,50,100}; //Зададим границы

        var users = numbers.Select(x => new user( Math.Abs(x - 3))); //Генерим Юзеров

        var __n = numbers.OrderBy(x=>x).Select((x, y) => new { start = x, end = y == numbers.Count() - 1 ? numbers.Max() + numbers.Max() : numbers[y + 1]}).Select(x=> Enumerable.Range(x.start,x.end - x.start)); //Немного последовательностей

        var result = users.GroupBy(x => __n.Where(xx => xx.Contains(x.age)).FirstOrDefault().Min().ToString() +" -- "+ __n.Where(xx => xx.Contains(x.age)).FirstOrDefault().Max().ToString()).Select(x => new { desc = x.Key, users = x.Count() }); //Вычисляем результат

        }
    }


    public class user
    {
        public int age;
        public user(int _age)
        {
            this.age = _age;
        }
    }

}
70 Serginio1
 
30.08.15
09:14
(69) Спасибо!!! Не знал.
Правда в 1 строчку тяжело читать. Но прикольно!
71 Serginio1
 
30.08.15
10:45
Кстати посмотрел 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();



Генерится левое соединение.
72 Serginio1
 
30.08.15
12:48
Вот еще интересные примеры https://www.linqpad.net/WhyLINQBeatsSQL.aspx
73 Serginio1
 
30.08.15
12:50
74 Serginio1
 
30.08.15
15:19
Операции с множествами: объединение, пересечение, разность

http://metanit.com/sharp/entityframework/4.6.php
75 Serginio1
 
31.08.15
10:49
Насчет левых Соединений

var бд = Константы1С.ГлобальныйКонтекст.БД;
            var qr = from Номенклатура in бд.Спр_Номенклатура
                     from единицы in бд.Спр_Единицы.Where(единица => единица.ВладелецId == Номенклатура.ID).DefaultIfEmpty()
                     select new { Номенклатура.Наименование,
                         Номенклатура.ПолнНаименование,
                         единицы.ШтрихКод,
                         ОКЕИ=единицы.ОКЕИ.Наименование
                     };


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


                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 (10)
        [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]
        LEFT OUTER JOIN [dbo].[SC41] AS [Extent3] ON [Extent2].[SP79] = [Extent3].[ID]
    )  AS [Limit1]
76 Ненавижу 1С
 
гуру
31.08.15
10:52
а почему не 8-ка
77 Гёдза
 
31.08.15
10:53
<тут картинка про троллейбус>
78 Asmody
 
31.08.15
10:53
(76) Была б 8ка, его бы на эту фигню не потянуло.
79 Гёдза
 
31.08.15
10:55
(78) Насколько я помню он изначально нет к 8 прикручивал
80 Serginio1
 
31.08.15
11:09
(76) Тут кричать будут про лицезионное соглашение раз. Во вторых сейчас 8 ки только файловые.
(78) Тянет. Так или иначе приходилось работать с большими объемами и объединять с помощью Merge, брать данные для сайта.
Сейчас просто интересно посмотреть, что это за зверь.
(79) Я ко всем 1С с чем работаю
81 Serginio1
 
31.08.15
11:10
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]
82 Serginio1
 
31.08.15
11:28
А такой запрос

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
83 necro
 
31.08.15
11:40
Гадость какая.
84 Serginio1
 
31.08.15
11:47
(83) Здесь с форматированием http://rsdn.ru/forum/dotnet/6163878.1
85 Serginio1
 
01.09.15
10:10
Нашел как использовать запрос в стиле 1С 8

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

           foreach (var элем in res)
            {
                //var элем = (Справочник.Номенклатура)элем1[0];
                Console.WriteLine("{0}.{1} - {2}", элем.Наименование.TrimEnd(), элем.Артикул, элем.ПолнНаименование.TrimEnd());
     //           Console.WriteLine("{0}.{1} - {2}", элем[0], элем[1], элем[2]);
            }
86 Serginio1
 
01.09.15
10:14
https://msdn.microsoft.com/ru-ru/library/bb738573(v=vs.110).aspx
Отличия 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 поддерживает только запросы, которые выдают один результат на одну команду.
87 Serginio1
 
01.09.15
10:22
То есть нельзя создать пакет и временную таблицу.
Но вот используемые функции значительно больше чем в 1С

https://msdn.microsoft.com/ru-ru/library/bb738683(v=vs.110).aspx

В том числе и Функции поставщиков данных (Майкрософт)


Функции поставщиков данных (Майкрософт) находятся в пространстве имен SqlServer.  

Пример  

SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM
    AdventureWorksEntities.Contact AS c WHERE
    c.ContactID BETWEEN 10 AND 12
88 Asmody
 
01.09.15
10:34
(80) [Во вторых сейчас 8 ки только файловые.] — ?????!!!!!
89 Serginio1
 
01.09.15
10:38
(88) Ну вот так случилось.. Переводить на 8ки муторно сильно специализированные конфигурации под производства писанные в течении лет 10, а используя функциал 1С++ возможностей не меньше.
90 Serginio1
 
01.09.15
11:42
Интересно использование переменных в запросе

var бд = Константы1С.ГлобальныйКонтекст.БД;
            var qr = (from единица in бд.Спр_Единицы
                      group единица by new {
                          единица.ВладелецId,
                          Наименование=единица.Владелец.Наименование.TrimEnd()
                          }
                          
                          
                          into группа
                          let Количество = группа.Count()
                          where Количество > 1

                      select new
                      {

                          Наименование = группа.Key.Наименование,
                          Количество = Количество,
                      });


            foreach (var элем in qr)
            {
                //var элем = (Справочник.Номенклатура)элем1[0];
                Console.WriteLine("{0}.{1} - ", элем.Наименование,  элем.Количество);
                //           Console.WriteLine("{0}.{1} - {2}", элем[0], элем[1], элем[2]);
            }


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

SELECT
    1 AS [C1],
    [GroupBy1].[K2] AS [C2],
    [GroupBy1].[A1] AS [C3]
    FROM ( SELECT
        [Join1].[K1] AS [K1],
        [Join1].[K2] AS [K2],
        COUNT([Join1].[A1]) AS [A1]
        FROM ( SELECT
            [Extent1].[PARENTEXT] AS [K1],
            RTRIM([Extent2].[DESCR]) AS [K2],
            1 AS [A1]
            FROM  [dbo].[SC75] AS [Extent1]
            INNER JOIN [dbo].[SC84] AS [Extent2] ON [Extent1].[PARENTEXT] = [Extent2].[ID]
        )  AS [Join1]
        GROUP BY [K1], [K2]
    )  AS [GroupBy1]
    WHERE [GroupBy1].[A1] > 1

Having нет
91 Serginio1
 
01.09.15
12:00
А вот такой

var qr = (from единица in бд.Спр_Единицы
                      group единица by new {
                          единица.ВладелецId,
                          Наименование=единица.Владелец.Наименование.TrimEnd()
                          }
                          
                          
                          into группа
                          let Количество = группа.Count()
                          where Количество > 1

                      select new
                      {

                          Наименование = группа.Key.Наименование,
                          Количество = Количество,
                          Группа = группа
                      });


            foreach (var элем in qr)
            {
                   Console.WriteLine("{0}.{1} - ", элем.Наименование,  элем.Количество);
              
                foreach (var единица in элем.Группа)
                {

                    Console.WriteLine("{0}.{1} - ", единица.ОКЕИ.Наименование, единица.ШтрихКод);
                
                }
            }

Превращается

SELECT
    [Project1].[C2] AS [C1],
    [Project1].[C3] AS [C2],
    [Project1].[C1] AS [C3],
    [Project1].[PARENTEXT] AS [PARENTEXT],
    [Project1].[C4] AS [C4],
    [Project1].[ID] AS [ID],
    [Project1].[PARENTEXT1] AS [PARENTEXT1],
    [Project1].[ISMARK] AS [ISMARK],
    [Project1].[SP79] AS [SP79],
    [Project1].[SP76] AS [SP76],
    [Project1].[SP78] AS [SP78],
    [Project1].[SP80] AS [SP80],
    [Project1].[SP8752] AS [SP8752],
    [Project1].[SP9519] AS [SP9519]
    FROM ( SELECT
        [GroupBy1].[A1] AS [C1],
        [GroupBy1].[K1] AS [PARENTEXT],
        [GroupBy1].[K2] AS [C2],
        [GroupBy1].[K3] AS [C3],
        [Join2].[ID1] AS [ID],
        [Join2].[PARENTEXT] AS [PARENTEXT1],
        [Join2].[ISMARK1] AS [ISMARK],
        [Join2].[SP79] AS [SP79],
        [Join2].[SP76] AS [SP76],
        [Join2].[SP78] AS [SP78],
        [Join2].[SP80] AS [SP80],
        [Join2].[SP8752] AS [SP8752],
        [Join2].[SP9519] AS [SP9519],

        CASE WHEN ([Join2].[ID1] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C4]
        FROM   (SELECT
            [Join1].[K1] AS [K1],
            [Join1].[K2] AS [K2],
            [Join1].[K3] AS [K3],
            COUNT([Join1].[A1]) AS [A1]
            FROM ( SELECT
                [Extent1].[PARENTEXT] AS [K1],
                1 AS [K2],
                RTRIM([Extent2].[DESCR]) AS [K3],
                1 AS [A1]
                FROM  [dbo].[SC75] AS [Extent1]
                INNER JOIN [dbo].[SC84] AS [Extent2] ON [Extent1].[PARENTEXT] = [Extent2].[ID]
            )  AS [Join1]
            GROUP BY [K1], [K2], [K3] ) AS [GroupBy1]
        LEFT OUTER JOIN  (SELECT [Extent3].[ID] AS [ID1], [Extent3].[PARENTEXT] AS [PARENTEXT], [Extent3].[ISMARK] AS [ISMARK1], [Extent3].[SP79] AS [SP79], [Extent3].[SP76] AS [SP76], [Extent3].[SP78] AS [SP78], [Extent3].[SP80] AS [SP80], [Extent3].[SP8752] AS [SP8752], [Extent3].[SP9519] AS [SP9519], [Extent4].[DESCR] AS [DESCR]
            FROM  [dbo].[SC75] AS [Extent3]
            INNER JOIN [dbo].[SC84] AS [Extent4] ON [Extent3].[PARENTEXT] = [Extent4].[ID] ) AS [Join2] ON ([GroupBy1].[K1] = [Join2].[PARENTEXT]) AND (([GroupBy1].[K3] = (RTRIM([Join2].[DESCR]))) OR (([GroupBy1].[K3] IS NULL) AND (RTRIM([Join2].[DESCR]) IS NULL)))
        WHERE [GroupBy1].[A1] > 1
    )  AS [Project1]
    ORDER BY [Project1].[C2] ASC, [Project1].[PARENTEXT] ASC, [Project1].[C3] ASC, [Project1].[C4] ASC
92 ДенисЧ
 
01.09.15
12:00
Может, ты себе блошек в свитере заведёшь?
93 Serginio1
 
01.09.15
12:04
(92) Так зачем ты сюда ходишь?
Я пишу для тех кому это интересно. Тебе правда интересно, что я пишу?
94 Mutniy2
 
01.09.15
12:09
(93) +1
Мало ли кому что не нравится.
95 Serginio1
 
01.09.15
12:12
(92) На самом деле очень мало информации по тому ка отображаются линковские запросы на запросы SQL. Я восполняю этот пробел. И кстати заодно разоблачить мифы о неповоротливости линка
96 qwerty2469
 
01.09.15
12:23
(0) LINQ хорош, когда нужно писать "запросы" к коллекции объектов. А LINQ-ом заменять SQL запросы, по моему как-то не кошерно.
97 Serginio1
 
01.09.15
12:28
(96) Ну вот я здесь показываю, что более чем кошерно. Функционал очень высокий. Кроме того есть Entity SQL
смотри 85. Но практически все возможности покрываются Linq
https://msdn.microsoft.com/ru-ru/library/bb399560(v=vs.110).aspx

Entity SQL представляет собой независимый от хранилища язык запросов, аналогичный языку SQL.  Entity SQL позволяет выполнять запросы к данным сущности, представленным либо в виде объектов, либо в табличной форме. Возможность использования Entity SQL необходимо рассматривать в следующих случаях:

• Если запрос должен создаваться динамически во время выполнения.  В этом случае следует также рассмотреть возможность использования методов построителя запросов ObjectQuery<T> вместо создания строки запроса Entity SQL во время выполнения.


• Если требуется определить запрос как часть определения модели.  В модели данных поддерживается только Entity SQL. Дополнительные сведения см. в разделе QueryView Element (EntitySetMapping).


• Если EntityClient применяется для возврата допускающих только для чтения данных сущности в виде наборов строк с использованием EntityDataReader.  Для получения дополнительной информации см. Поставщик EntityClient для платформы Entity Framework.


• Для специалиста по языкам запросов на основе SQL язык Entity SQL может оказаться самым естественным выбором.



Ну и язык запросов например восьмерки значительно беднее Linq то EF кроме пакетов и временных таблиц
98 Serginio1
 
01.09.15
16:29
Аналог Union All


var query = (from x in db.Table1 select new {A = x.A, B = x.B})
    .Concat( from y in db.Table2 select new {A = y.A, B = y.B} );
99 Гёдза
 
01.09.15
16:47
(98) И чем такая запись лучше канонической?
100 Гёдза
 
01.09.15
16:49
(100) Какие конкретно фичи ты предлагаешь заюзать из Linq to EF
101 Serginio1
 
01.09.15
17:00
(99) Это просто другая запись.
(100) Конкретно я предлагаю просто ознакомиться и сравнить с запросами в стиле 8 ки, которые тоже можно делать.

В Linq ты получаешь IntelliSense и синтаксический контроль на этапе разработки.
И например если тебе нужен будет доступ из asp.net ты тоже можешь использовать БД 1С.
Там кстати Linq to EF это уже стандарт.

Просто попробуй и для себя реши зачем это нужно.
102 Гёдза
 
01.09.15
17:02
(101) Так свой стартап никогда не откроешь.
Вначале должна быть проблема, которую ты можешь виртуозно решить
103 Serginio1
 
01.09.15
17:09
(102) Ну я сейчас просто знакомлюсь, в дальнейшем есть планы прикрутить к уже существующему проекту на Asp.net
А я ничего открывать то и не собираюсь. Просто например в среде 1С ников очень мало знающих Net. Я стараюсь вести просветительскую деятельность, заодно и сам познавая новые фичи.

А что касается проблем, то я их решаю в том числе и с помощью Net. А таких проблем достаточно.
104 Гёдза
 
01.09.15
17:14
(103) Это шутка. Поэтому тебя здесь и не понимают, потому что твои идеи не решают практических задач
105 Serginio1
 
01.09.15
17:27
(104) Почему не решают? Еще раз тру 1С нику это не нужно, а вот тем кто хочет интегрировать с другими системами или повысить свой программистский уровень то такие есть. Просто пока их мало.
А мои идеи решают кучу моих задач.
106 Serginio1
 
01.09.15
17:29
и вполне возможно, что Linq можно включить и в 1С
107 Masquerade
 
01.09.15
22:50
(106)
Дружище.

LINQ основан на методах расширения.
МЕТОДАХ. ООП в 1С как бы даже и не пахнет, буквально - не пахнет.

Подцеплять к БД 1С какие-то сторонние прилады, особенно из .NET чревато.

В первую очередь - это архитектурно неверно, лучше использовать для этого различные средства интгерации.

Ну а во вторую - впаяет вам junior какой-нибудь иницилайзер "DropCreateDatabaseIfModelChanges" и ага.
108 Masquerade
 
01.09.15
22:51
(106)
линк, а особенно L2O - прекрасен. Не случайно лямбды приползли только в 8-ую, Яву, но 1С...

Не ту аудиторию для пропаганды ты выбрал.
109 Serginio1
 
02.09.15
08:20
(107) Linq это прежде всего функциональщина, вывод типа и иммутабельность. Просто C# гибридный язык и использует все прелести одного и другого. Правда из-за этого у него и недостатки.

Аналог линка прикручивают и на JS.
Я лично, считаю, что для 1С прекрасно подошел TypeScript, а там и вывод типа и все, что не хватает 1С.

А насчет аудитории, то все течет и все меняется. Когда то и шарписты плевались на Linq и говорили, что циклы наше все. Однако прошло совсем немного времени и Linq это уже стандарт.
110 NikVars
 
02.09.15
10:35
(98) Э-э-э-э... Накидай заполнение декларации по прибыли для конфигурации Бухгалтерский учет 7.7.
Хочу стравнить реализацию поставщика и твои разработки.
111 Serginio1
 
02.09.15
10:39
(110) А может сразу все типовые конфы переписать?
112 NikVars
 
02.09.15
10:41
(111) Начни с прибыли, а то обидешь поставщика изящностью кода.
113 Serginio1
 
02.09.15
10:46
В линк есть одна хорошая особенност в том, что мы можем неоднократно применять его для расширения в том числе и добавлять условия. Например

Если ЗначениеЗаполнено(Номенклатура) Тогда
Запрос.Where(запись=>запись.НоменклатураId==Номенклатура.Ссылка
КонецЕсли

Если ЗначениеЗаполнено(Фирма) Тогда
Запрос.Where(запись=>запись.ФирмаId==Фирма.Ссылка
КонецЕсли


Но можно также и расширять условия
http://www.albahari.com/nutshell/predicatebuilder.aspx
https://github.com/scottksmith95/LINQKit

Можно например написть условие по OR
Можно написать обобщенныую функцию
public IQueryable<TEntity> НайтиПоВхождениюВНаименование<TEntity>(params string[] keywords) where TEntity : СправочникПредок
        {
            var predicate = PredicateBuilder.False<TEntity>();

            foreach (string keyword in keywords)
            {
                string temp = keyword;
                predicate = predicate.Or(p => p.Наименование.Contains(temp));
            }
            return this.Set<TEntity>().AsExpandable().Where(predicate);
        }
и использовать например так

var запрос = бд.НайтиПоВхождениюВНаименование<Справочник.Номенклатура>("Linq", "Наше", "Все").Select(товар => товар.Наименование);

            foreach (var товар in запрос)
            {

                Console.WriteLine("{0} ", товар);

            }
114 Mutniy2
 
02.09.15
10:46
(109) > Linq это прежде всего функциональщина, вывод типа и иммутабельность.

Шито?
115 NikVars
 
02.09.15
10:47
(113) Все это настолько вторично, что я уже зеваю...
116 Serginio1
 
02.09.15
10:48
При это генерится такой запрос

SELECT
    [Extent1].[DESCR] AS [DESCR]
    FROM [dbo].[SC84] AS [Extent1]
    WHERE ([Extent1].[DESCR] LIKE @p__linq__0 ESCAPE N'~') OR ([Extent1].[DESCR] LIKE @p__linq__1 ESCAPE N'~') OR ([Extent1].[DESCR] LIKE @p__linq__2 ESCAPE N'~')
-- p__linq__0: '%Linq%' (Type = String, Size = 4000)
-- p__linq__1: '%Наше%' (Type = String, Size = 4000)
-- p__linq__2: '%Все%' (Type = String, Size = 4000)
117 Serginio1
 
02.09.15
10:49
(115) Так зайди в другие темы, зачем здесь то зевать. Какой смысл в твоей реплике?
118 NikVars
 
02.09.15
10:50
(117) Ты почитай порядок заполнения декларации по прибыли и набросай его особенности на Linq.
Да, еще интересно как на Linq клеточки рисовать. Эта тема вообще не раскрыта.
119 DDwe
 
02.09.15
10:50
(109) И что?
120 Serginio1
 
02.09.15
10:53
(118) То есть на C# ничего нарисовать нельзя?
(114) http://rsdn.ru/article/dotnet/LinqAsStapToFp.xml
(119) Разверни поподробнее свой вопрос
121 DDwe
 
02.09.15
10:55
(120) К чему вся эта суета? Смысл в чем?
122 Гёдза
 
02.09.15
10:57
(121) Хочется прогать на настоящем языке, но платят только за 1С
123 DDwe
 
02.09.15
10:57
+ (121) Так, ЧСВ публично почесать?
124 DDwe
 
02.09.15
10:58
(122) Спасибо, объяснил. А то от ТС не дождешься.
125 oleg_km
 
02.09.15
11:03
(124) Евангелие Мф. 7:6 почитай, сразу станет все понятно.
126 Serginio1
 
02.09.15
11:04
(121) Уже много раз писал зачем.
На самом деле очень мало информации по тому ка отображаются линковские запросы на запросы SQL. Я восполняю этот пробел. И кстати заодно разоблачить мифы о неповоротливости линка

Просто например в среде 1С ников очень мало знающих Net. Я стараюсь вести просветительскую деятельность, заодно и сам познавая новые фичи.
127 Гёдза
 
02.09.15
11:07
(126) Почему именно Net, а не Java. Вторая вроде как более популярна и лучше годится как 2 язык (если никакой кроме 1С не знаешь)
128 Serginio1
 
02.09.15
11:11
(127) Потому, что я лучше знаю C# чем Яву. Но я показываю принцип , который легко перенести на ту же Яву если конечно там есть аналоги. Вот если тебя заинтересовало напиши и я с удовольствием посмотрю.
129 Гёдза
 
02.09.15
11:12
(128) Я вот хочу что-нибудь изучить другое, но к сожалению некуда навыки применять, а тупо учить теорию не хочу
130 Serginio1
 
02.09.15
11:14
(129) Как кстати прикрутить яву по аналогии с http://catalog.mista.ru/public/238584/
131 Serginio1
 
02.09.15
11:15
(129) Кстати Linq изучить надо. Он и в яве тоже применяется
132 NikVars
 
02.09.15
11:16
(120) Тема "Code First и Linq to EF на примере 1С версии 7.7" с тосованием переменных и констант - туфта. Она предметно не интересна и академически бесполезна.
Тема "Code First и Linq to EF на примере реализации декларации по прибыли для 1С версии 7.7" - гут тема.
Тут вся изящность, красота кода будут соперничать с исключительной логикой разработки и демострировать крутизну и мощь нового подхода и вдохнет новую жизнь в увядающий программный продукт 1С 7.7.
133 NikVars
 
02.09.15
11:18
Если новый язык будет применен к разработки декларации по НДС, то, возможно, ты решишь проблемы заполнения декларации по НДС на больших объемах книг покупок/продаж.
134 Serginio1
 
02.09.15
11:21
(133) Пока лениво. Есть куча своей работы. Предлагаю тебе самому ознакомиться и заработать на этом.
135 NikVars
 
02.09.15
11:21
(134) Ты же тут рисуешь легкость, мощь и простоту.
136 Гёдза
 
02.09.15
11:22
(131) Я и не говорю, что не надо. Просто без реального применения - невозможно
137 Serginio1
 
02.09.15
11:29
(135) Прекращай флудить. Не интересно не заходи. Я не рисую легкость и простоту. Я показываю возможности. Просто для некоторых эти возможности не будут доступны по причине их непонимания. От того, что ты будешь больше флудить понимание линка у тебя не увеличится. И применить его для своей декларации НДС ты не сможешь. Причем делал я эту декларацию на 1С++ и ничего сложного в ней так и не увидел.

(136) Ну например напиши свой сайт на Asp.Net.
138 Гёдза
 
02.09.15
11:29
(137) плохой из тебя учитель
139 Serginio1
 
02.09.15
11:32
(138) Учитель реально плохой. Но например для меня в свое время такая статья была бы кладезью. Я просто делюсь своим опытом.
140 DDwe
 
02.09.15
11:33
(137) Очень плохой учитель.Нервный. Валериану  три раза в день.
141 Serginio1
 
02.09.15
11:34
(138) Кстати ответь на 130. Интересно как прикрутить классы Явы к 1С.
142 NikVars
 
02.09.15
11:35
(137) Я делаю два дела сразу: поднимаю твою ветку и позволяю тебе задуматься стоит ли менять черную обувь на коричневую.
А в ответ излишняя говориливость с попыткой зарыть рот другим.
А раз мои вопросы и предложения зависли в положении "лениво, но могу...", то я и продолжаю это выяснять.
143 Serginio1
 
02.09.15
11:37
(142) Продолжай. А лучше задавай вопросы по существу.
А то брошу все и начну писать декларацию на Linq и еще кучу всего и ответов не дождешься.
144 Гёдза
 
02.09.15
11:38
(141) Зачем прикручивать что-то к 1С? Это тупковый путь
145 NikVars
 
02.09.15
11:39
(143) Какие реальные текущие проблемы пользователей 1С 7.7 можно решить указанными тобой программными срествами?!
146 Гёдза
 
02.09.15
11:39
(143) Если ты хочешь, чтоб твою разработку использовали. Покажи хотя бы одно РЕАЛЬНОЕ применение.
Платформа - ничто. Магазин приложений - все!
147 NikVars
 
02.09.15
11:41
(146) Поддерживаю!!!
Достаточно одного яркого практичного примера...
148 Serginio1
 
02.09.15
11:41
(144) Почему? Я использую классы Net для широкого круга задач без использования обертки их в ВК или COM. Очень удобно.
(145) В твоих руках Никаких.
149 Serginio1
 
02.09.15
11:44
(146) Реально я хочу показать возможности Net на примере исползования Code First и Linq to EF. Только и всего
150 NikVars
 
02.09.15
11:44
(148) Да, Кэп! Имено - никаках, и к чему тогда все эти твои потуги?!
151 Гёдза
 
02.09.15
11:45
(149) Да вс е и так знают, что у НЕТ док.я возможностей. А толку?
152 NikVars
 
02.09.15
11:46
(149) Возможностей-то нет...
"Слова ничего не стоят покажите мне код" Линус Торваль
153 DDwe
 
02.09.15
11:48
(152) + "дс". ))
154 Serginio1
 
02.09.15
11:49
(151) Так вот я использую их для огромного круга задач. Если этих задач у тебя нет то это уже другая проблема. Тогда и тему эту читать не стоит. Если же вдруг у тебя такие задачи появятся и тебе захочется разобраться в вопросах, то ты можешь найти мои разработки и подчерпнуть для себя, что то нужное.
155 NikVars
 
02.09.15
11:50
(154) "Так вот я использую их для огромного круга задач"
Ты просто не знаешь 1С...
:(
156 NikVars
 
02.09.15
11:51
(154) Из твоей статьи: "Здесь мечта каждого программиста на 8 ке и 7 ке выполняет следующий код"
Неси дневник! Двойка...
157 NikVars
 
02.09.15
11:55
О придумал!
А = 2
Этот код будет выполняться и на 7-ке и на 8-ке и еще на куче других языков программирования.
И что мне с этим знанием делать...
158 Serginio1
 
02.09.15
12:00
(157) Лучше прикрути SignalR, websocket, вацап, вэб сервисы с поддержкой WS-+, xml сериализация файлов не поддерживаемые 1С, вэб сервисы с описанием неподерживаеых 1С форматов, куча функций которые есть в Net и нет в 1С.
159 Serginio1
 
02.09.15
12:05
160 NikVars
 
02.09.15
12:07
(158) Поднимаемая тобой тем интересна, но браться за нее нужно в двух случаях:
1) В случае невозможности решения проблемы средствами 1С 7.7;
2) В случае минимального времени для разработки не средствами 1С 7.7 и простоты дальнейшей поддержки.
Мой опыт подсказывает мне - иное - песочница и мои пользователи - мои кролики.
161 Serginio1
 
02.09.15
12:30
(160) Такие вещи возникают достаточно часто. И моя тема просто показать, за счет чего можно решить такие проблемы.
Code First несложно прикрутить и к 8 ке. И если тебе вдруг понадобится прикрутить сайт на asp.Net ты можешь найти некоторые ответы из моих разработок.
А на полный функционал у меня пока нет времени.
Информации много не бывает, главное её правильно фильтровать.
162 Serginio1
 
02.09.15
20:08
(156) Можно я оправдаюсь перед тобой О мой строгий учитель.
В 3 выполняется запрос к периодческому реквизиту элемента справочника, на дату записанную в реквизит этого элемента.
Так как в 1С 7.7 дата без времени и на одну дату может быть несколько значений записанные при проведении документа, то использовать max или min нельзя. Поэтому используются коррелирующие запросы с сортировкой по дате, времени итд

RDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID]

OUTER APPLY  (SELECT TOP (1) [Project1].[ROW_ID] AS [ROW_ID], [Project1].[DATE] AS [DATE], [Project1].[VALUE] AS [VALUE]
        FROM ( SELECT *

            FROM [dbo].[_1SCONST] AS [Extent2]
            WHERE (9697 = [Extent2].[ID]) AND ([Extent2].[OBJID] = [Extent1].[ID]) AND ([Extent2].[DATE] <= [Extent1].[SP9700])
        )  AS [Project1]
        ORDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID] DESC ) AS [Limit1]
163 Serginio1
 
02.09.15
20:14
Про семерку вообще умолчу, а в 8 ке ты можешь использовать коррелирующие запросы только в предложении В (IN)
v8: Подзапросы с Выбрать Первые

При этом для оптимального использования подзапроса Выбрать Первые нужна сортировка
v8: Подзапросы с Выбрать Первые

Linq не является совершенством и OUTER APPLY не является совершенством. Оптимальным будет озвученный здесь

http://rsdn.ru/forum/flame/6156923.1

На базе 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 в моем случае показал себя совсем не с лучшей стороны.
164 Serginio1
 
02.09.15
20:16
Про top 1 with ties скажу отдельно. Выбираются все записи с row_number() ==1

WITH TIES
Используется, если требуется вернуть две или более строки, которые совместно занимают последнее место в ограниченном результирующем наборе. Требуется использовать с предложением ORDER BY. WITH TIES может привести к тому, что вернется строк больше, чем указано в значении expression. Например, если expression имеет значение 5, но еще 2 строки соответствуют значениям в столбцах ORDER BY в строке 5, то результирующий набор будет содержать 7 строк.
Предложение TOP...WITH TIES может быть задано только в инструкциях SELECT, и только если указано предложение ORDER BY. Порядок возврата связанных записей произволен. ORDER BY не влияет на это правило.
165 Serginio1
 
02.09.15
20:18
Посмотрю поддерживает ли в Entity SQL доступ к row_number() over(partition
166 kofeinik
 
02.09.15
20:18
(162) "Так как в 1С 7.7 дата без времени и на одну дату может быть несколько значений записанные при проведении документа"

Одно значение на одну дату.
167 Serginio1
 
02.09.15
20:24
(166) Ошибаешься. При проведении документа можно привязать даже несколько строк к одному элементу справочника. И дата будет одна, и документ, только строки будут различаться.
168 Serginio1
 
02.09.15
20:27
http://catalog.mista.ru/public/63125/

Значения даты должны быть меньше либо равно интересующего нас. Из полученной выборки нужно отобрать значение, соответствующее максимальной дате. Для этого удобнее всего воспользоваться конструкцией «Select top 1 … order by …» с сортировкой в обратном хронологическом порядке, не забывая, что значения могут устанавливаться документами внутри одного дня. Примерно так:
169 kofeinik
 
02.09.15
20:29
(167) спр.получить(дата) - возвращает одно значение на одну дату. Если физически в базе лежит несколько значений - использование этого - грязный хак.
170 Serginio1
 
02.09.15
20:34
(169) Пройдись используя Периодический и ВыбратьЗначения
171 Serginio1
 
02.09.15
20:37
172 Masquerade
 
02.09.15
21:19
(161)

Зря ты так с ним.

Ну что он тебе скажет - "А ты нарисуй РСВ-1 образца 2014 согласно утвержденному порядку заполнения с  WITH TIES!!"

У него язык 1С под это ЗА-ТО-ЧЕН. )))))
173 oleg_km
 
02.09.15
21:51
(172) Да сегодня смотрел, как формируются эти ведомости. Бесконечная, слабоструктурированная работа над текстом запроса, сложения, СтрЗаменить. Просто макаронный код. Может в 8.3 все-таки перепишут на объектную, так большинство 1с-ников не разберется. А потом, из-за отсутствия типизации стоит объекту покинуть область видимости, а даже при процедурном программировании это сплошь и рядом, так сразу пропадает подсказка в конфигураторе, проваливаешься в технологиях лет на 20-30 назад
174 kofeinik
 
02.09.15
22:25
(171) так там и написано, что порядок выборки будет разный, плюс пишем два документа двумя пользователями с разницей менее одной секунды, далее - см. (169)
175 kofeinik
 
02.09.15
22:32
(173) это как раз специфика работы, завтра рсв опять поменяют, отчет переписывать, тут не до вылизывания классов, нужно, чтобы работало квартал-два до очередной смены заполнения.
176 Serginio1
 
02.09.15
22:56
(174) Там черным по белому написано, что на одну дату может быть несколько значений, а при ЗначениеНаДату или использоватьДату использует Выбрать Первые с сортировкой по
  ORDER BY [Project1].[DATE] DESC, [Project1].[TIME] DESC, [Project1].[DOCID] DESC, [Project1].[ROW_ID] DESC ) AS [Limit1]

(175) При нормальном проектировании переписывать значительно проще.
177 Serginio1
 
02.09.15
22:59
(173) Мне в этом плане очень нравится TypeScript. Он значительно удобнее голого JS. Вот такой подходит для 1С.
178 Serginio1
 
02.09.15
23:04
(174) Что бы тебе было более понятно ситуация такая как http://rsdn.ru/forum/db/6085704.1

Есть несколько полей по которым определяется позиция. Поэтому мы не можем применить поиск по max так как при этом может использоваться одно поле. Либо как в http://catalog.mista.ru/public/63125/
Вычислять составное поле.
179 Serginio1
 
02.09.15
23:06
И в одном документе может быть две записи по одному элементу. Там различие будет только по ROW_ID
180 Serginio1
 
03.09.15
00:05
Вообще правильно еще сортировать по LineNo

http://vandalsvq.3dn.ru/publ/3-1-0-3
181 kofeinik
 
03.09.15
00:39
(176) одно значение правильное, то, которое вернется по  спр.получить(дата). Все остальное - от лукавого. По поводу "При нормальном проектировании переписывать значительно проще." - гы, ты РСВ-1 будешь "нормально проектировать" дольше, чем выйдет новая. Вообще, весь этот детский сад из топика - вполне вписывается в тему just for fun, написать шахматы на ассемблере, или, другими словами, у тебя слишком много свободного неоплачиваемого времени.
182 Serginio1
 
03.09.15
08:21
(181) Меня поражает твоя ивертливость. в 166 заявляешь, что может быть только одно значение на дату, потом говоришь, что от лукавого. Тебе даю ссылки, что значений на одну дату может быт много, а вот алгоритм описанный в 156 как раз и возвращает только одну самое последнее значение.
Здесь нет ничего от лукавого. Это как раз проектирование БД.

По поводу РСВ и прочих. Сколько раз было проще написать заново, чем переписывать чей то сделанный на скору руку код. При этом получается значительно быстрее выполнение, и дальнейшая поддержка становится легче
По поводу детского сада. Ну не нравится или не понимаешь, то зачем что то заявлять неправильное, а затем оправдываться.
183 DDwe
 
03.09.15
08:50
Ветка странная. ТС сам с собой большую часть времени разговаривает, что то доказывает.
184 akaBrr
 
03.09.15
09:10
(183) ТСа прет от темы, не мешай :D
185 oleg_km
 
03.09.15
09:48
(175) Так классы для того и придуманы, чтобы легче было кусочки программы менять. А 1С-никам то невдомек.
186 NikVars
 
03.09.15
09:54
(185) Напиши план счетов на классах и все обортно-сальдовые.
Легче применять не "классы", а то, что уже написано.
187 oleg_km
 
03.09.15
09:59
(186) ну конечно, когда одни "накакли" приходится и в г... разбираться. ТС пишет же про когда вы сами выбираете инструмент, то можно выбрать более современный. А если ваша работа заключается только в правке типовых, то да, я вам сочувствую.
188 NikVars
 
03.09.15
10:12
(187) Так нет же тобой написанного на классах "десерта". А по всему инету трындеж от "спецов" - как круто ООП, классы и прочая хня. Только, упс, когда речь заходит про бухучет - "спецы" сливаются и вдруг оказываются "сильно заняты".
189 DDwe
 
03.09.15
10:17
(188) +100500
Каждому овощу, свой фрукт.
190 oleg_km
 
03.09.15
10:22
(189) Точно, 1С-нику - кактус.

(188) Да, во всем мире как-то справляются без 1С. Наши люди тоже когда-то верили, что без КПСС конец света, а ничего вроде живем. "Бухучет" на 7.7 жил без запросов и вы считали что это нормально, теперь есть запросы, но нет объектов, облегчающих работу с ними, но вы тоже считаете это нормально. Завтра в 1С добавят LINQ и вы будете уже с пеной доказывать, что без этого никуда. А на счет "спецов", да никто не лезет на "территорию 1С", в Сомали же никто не пытается технопарк построить.
191 NikVars
 
03.09.15
10:25
(190) Во всем мире инженеров учат делу, а у нас - матану считать на листочке, сопромату - по старинным книгам и четить на ватмане карандашом в 21 веке. Поэтому у нас - умные, но делать нифига не умеют, там - тупые, но справляются. Вот и получается - у нас - "аргументированный трындеж", там - просто дело.
192 DDwe
 
03.09.15
10:29
(190) "Завтра в 1С добавят LINQ". Вот как добавят, тогда и смысл в разговоре появится.
193 Serginio1
 
03.09.15
10:55
(192) А для того, что бы он появился, нужны обсуждения.
Для того, что бы появились замыкания вместо ОписаниеОповещения итд. Синтаксис SQL хотя бы до стандарта SQL, а в идеале использовать и расширение поставщика.
итд. Нужна воля низов, а не аморфное следование идеям верхов
194 NikVars
 
03.09.15
11:01
(193) Делай, если интересно! Пример: движок 7.7 уже не развивается. Но умельцы слепили секретный релиз,решающий определенные проблемы, и его даже юзают.
195 Serginio1
 
03.09.15
11:03
(194) Я на нем и работаю. Кстати Code First работает только с SQL 2005 и выше. Еще раз Code First прикрутить к 8 ке не проблема.
196 NikVars
 
03.09.15
11:06
(195) "Code First работает только с SQL 2005" - Ты это указал в своей статье?!
:)))
197 Мимохожий Однако
 
03.09.15
11:09
Не взлетит. Хотя романтизм ТС интересен.
(0)У тебя есть больше чем 2 клиента с этой приблудой?
Надеюсь на честный ответ.
198 Asmody
 
03.09.15
11:14
(191) А что, с появлением компьютеров матан или сопромат сильно поменялся? Так-то маткаду и матлабу еще нас в университете учили, и сейчас, думаю, учат. Только прежде чем что-то наматлабить нужно иметь понимание что ты хочешь получить.
199 Serginio1
 
03.09.15
11:18
(197) Я не ищу клиентов, а делюсь опытом. Мне лично такие статьи нравятся и я наматываю себе на ус. А так там неполный функционал. Только справочники. Но не стоит большого труда его расширить на документы и регистры
(196) Так секретный релиз и позволяет семерке работать  с SQL 2005 и выше
200 Мимохожий Однако
 
03.09.15
11:26
(199)Т.е. практической пользы пока ноль. Тебе нужны единомышленники - исследователи. Только 1С77 здесь не при делах. ИМХО.
201 Serginio1
 
03.09.15
11:32
(200) Я просто хотел показать Code First и Linq to EF на примере 1С версии 7.7 только и всего.
Показал как можно пользоваться, какие при этом генерятся SQL запросы, какие есть ограничения, какие премущества и недостатки по сравнению с запросами восьмерки.
Здесь очень много информации. Буду рад если хоть одного человека это заинтересует. И судя по звездочкам http://catalog.mista.ru/public/393228/

5 человек заинтересовало.
202 Мимохожий Однако
 
03.09.15
11:35
(201)Сделай хотя бы один пример для 1С8 для конфигурации БП3.0, тогда звёздочек еще больше заработаешь. Трудно ориентироваться на программный продукт, который уже не развивается лет 8.
203 Asmody
 
03.09.15
11:39
(202) Что-то мне подсказывает, что для 8ки выгодность Linq на фоне СКД будет исчезающе мала.
204 Serginio1
 
03.09.15
11:41
(202) У меня 8 ки только файловые. Да всегда крику на лицензии. Кто понимает, тому несложно перенести описание таблиц и полей на 8 ку. Будет время напишу. Чуть позже.
(203) Есть смысл использовать например в ASP.net
Есть смысл использования Linq в 1С, но это уже другая тема.
205 Serginio1
 
03.09.15
11:45
(203) Еще можно использовать массовые операции
Еще есть можно использовать
System.Data.SqlClient.SqlBulkCopy — класс из состава ADO.NET, предназначенный для записи большого объема данных в таблицы SQL Server. В качестве источника данных может принимать DataRow[], DataTable, либо реализацию IDataReader.

http://habrahabr.ru/post/251397/

Например при работе с миллионными прайсами используя Merge.
206 Masquerade
 
03.09.15
15:38
(203)

--выгодность Linq на фоне СКД

И эти люди... Мда.

Можно развить тему? "LINQ на фоне СКД".

Очень интересно.
207 Asmody
 
03.09.15
15:50
(206) Пока выгодность применения linq в 8ке нулевая. Есть примеры обратного?
208 Гёдза
 
03.09.15
15:52
(207) Зато МОЩЬ!!!!
209 Masquerade
 
03.09.15
15:53
(207)
Какой linq в 8-ке - его там нет банально.
210 Гёдза
 
03.09.15
15:55
(209) "С помощью нехитрых приспособлений" можно
211 Serginio1
 
03.09.15
16:26
(210) Вот когда 1С выпустит "С помощью нехитрых приспособлений" тогда можно и говорить о выгодности применения. А для Asp.Net очень даже выгоднее чем дергать Вэб,HTTP сервисы или COM.
212 Гёдза
 
03.09.15
16:29
(211) А как ты имена таблиц получаешь? Получается что ты хардкоришь имена или как?
213 Serginio1
 
03.09.15
16:35
(212) Когда то генерил классы для доступа к DBF через курсоры BDE через RainBow/
Сейчас из поставки 1С++     
МД=СоздатьОбъект("MetaDataWork");
214 Serginio1
 
03.09.15
16:37
Для Ном=1 По Метаданные.Справочник() Цикл
        //Сообщить("Документ."+Метаданные.Документ(Ном).Идентификатор);
        ВалСпр=Метаданные.Справочник(Ном);
        
        ИмяСпр=ВалСпр.Идентификатор;
        ИДСпр=МД.ИДСправочника(ИмяСпр);
        ИД=МД.ИДСправочника(ИмяСпр);
        
        
        ДобавитьОбщиеРеквизитыСправочника(Текст,ТекстВиртуал,ВалСпр);
        Для НомРек=1 По ВалСпр.Реквизит() Цикл
            Вал=ВалСпр.Реквизит(НомРек);
            ИмяРеквизита=Вал.Идентификатор;
            ИДРекв=МД.ИДРеквизитаСправочника(ИмяСпр, ИмяРеквизита);
215 Serginio1
 
03.09.15
16:43
Для перечислений
Для Ном=1 По Метаданные.Перечисление() Цикл
        ВалПер=Метаданные.Перечисление(Ном);
        
        
    
        Для НомРек=1 По ВалПер.Значение() Цикл
            Вал=ВалПер.Значение(НомРек);
            ИмяРеквизита=Вал.Идентификатор;
            ТекстПеречисления.ДобавитьСтроку("public const string "+ИмяРеквизита+"="""+_IdToStr(МД.ИДОбъекта(Вал))+"   "";");        
        КонецЦикла;
216 trdm
 
03.09.15
16:58
(208) За пиццей на белазе! Крутотень...
217 Принт
 
03.09.15
17:03
А не проще ли юзать другую, возможно свою, платформу?
218 Serginio1
 
03.09.15
17:06
(217) Тут Nemerle не могут никак до конца сделать.
Сложно это все. И требует человеко годов и соответствующие деньги. А вот 1С стоит посмотреть в сторону Linq и заодно функциональщину.
219 trdm
 
03.09.15
17:13
Смысло то в чем? Где профит? Где я буду тратить меньше времени и получать результат быстрее и удобнее?
220 Serginio1
 
03.09.15
17:18
(219) Профит в том, что если тебе будет нужен доступ к данным 1С например из Asp.Net то Code First и Linq to EF значительно проще и быстрее юзать чем Вэб,HTTP сервисы или COM. Или тебе нужно построить ооооооочень сложный отчет требующий большого промежутка времени, то ты можешь использовать всю мощь Net.
221 Serginio1
 
03.09.15
17:23
220 Кстати Linq позволяет асинхронно обрабатывать запросы
222 trdm
 
03.09.15
17:23
(220) > то Code First и Linq to EF значительно проще и быстрее юзать

Думаю проще юзать то, что умеешь юзать. Для меня это немного другие инструменты.
223 Serginio1
 
03.09.15
17:25
222 Ну тогда, тебе эта мощь не нужна. А вот если ты пишешь сайт на Asp.net то тебе такой инструмент самое то. Ты просто не умеешь готовить.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.