Re[6]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: hugo Австрия  
Дата: 11.01.08 17:52
Оценка:
Здравствуйте, trickyKid, Вы писали:

K>Ну прям таки замена DataSet... Я что могу достать несколько связанных таблиц одним запросом?

Да, а в чем проблема? Он на то и LINQ.
Re[3]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: Igor Trofimov  
Дата: 12.01.08 15:14
Оценка: +1
VD>Приемущество именно Линка как раз и заключается в том, что запросы сливаются с основным языком. Производится сквозной контроль типов. Мы уже не может мполучить ошибку связанную с типом во время выполнения.

Хотелось бы добавить...
На самом деле вот какая штука не очень хорошая имеет место быть. Компилятором LINQ-выражение будет признано верным с точки зрения системы типов CLR.
Но для того механизма, который будет выполнять этот запрос в конечном итоге, правила корректности могут несколько отличаться.
Например, какой-нибудь Linq2Xxx может не поддерживать оператор is или например оператор ??. Ну и в конце концов, в Linq-выражениях могут использоваться какие-то произвольные внешние статические методы, незнакомые генератору SQL.
Соответственно, ТАКИЕ ошибки выявляются только на этапе выполнения и никакой помощи во время разработки не приходится ждять ни от IntelliSense, ни от компилятора, ни от кого-то еще
Re[4]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 07:35
Оценка:
K> Тут, кстати, вижу плюс использования обычного SQL в том, что чтобы проверить работает ли запрос, мне не надо проект собирать весь.
Данный "плюс использования обычного SQL" нивелируется наличием в VS2008TS такой фичи как панелька "Object Test Bench" (хотя может она и в Pro) есть. Тем кто не знает — это панелька, кот. позволяет создать объект произовольного типа с указанием параметров конструктора и вызвать его метод — подебажить...

Я, правда, должен признаться не смог её запустить (может подскажете как? — не могу в неё класс закинуть для конструирования).
Re[7]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 07:41
Оценка:
K>>Ну прям таки замена DataSet... Я что могу достать несколько связанных таблиц одним запросом?
H>Да, а в чем проблема? Он на то и LINQ.
А можно простенький примерчик для ньюьбов? Допустим для того же примера: получить список кастомеров и для каждого OrderList покупок.

Я связь своего кода с базой ранее делал через BLToolKit, хотелось бы попробовать новое решение, но пока нет книги толковой под рукой, а вот интересно.
Re[8]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 13.01.08 08:29
Оценка:
Здравствуйте, _Budda_, Вы писали:

K>>>Ну прям таки замена DataSet... Я что могу достать несколько связанных таблиц одним запросом?

H>>Да, а в чем проблема? Он на то и LINQ.
_B_>А можно простенький примерчик для ньюьбов? Допустим для того же примера: получить список кастомеров и для каждого OrderList покупок.

Сам полный ньюб, первый раз писал. Вот что получилось:

    static void Main(string[] args)
    {
        NorthwindDataContext db = new NorthwindDataContext();
        var customers = from c in db.Customers select c;
        foreach (var cust in customers)
        {
            Console.WriteLine("Customer {0} ID = {1}", cust.ContactName, cust.CustomerID);
            foreach (var order in cust.Orders)
            {
                Console.WriteLine(" Order Date = {0}", order.OrderDate);
                foreach (var orderDetail in order.Order_Details)
                {
                    Console.WriteLine("    Product {0} Quantity = {1}", orderDetail.Product.ProductName, orderDetail.Quantity);
                }
            }
            Console.WriteLine();
        }
        Console.ReadKey();
    }


Класс NorthwindDataContext сгенерил с помощью студии, тупо перетащив в дизайнер все таблицы из базы. БД — Northwind от Microsoft.
Re[5]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: denisio_mcp  
Дата: 13.01.08 08:46
Оценка:
Здравствуйте, _Budda_, Вы писали:

_B_>Данный "плюс использования обычного SQL" нивелируется наличием в VS2008TS такой фичи как панелька "Object Test Bench" (хотя может она и в Pro) есть. Тем кто не знает — это панелька, кот. позволяет создать объект произовольного типа с указанием параметров конструктора и вызвать его метод — подебажить...

_B_>Я, правда, должен признаться не смог её запустить (может подскажете как? — не могу в неё класс закинуть для конструирования).

Открываешь окошко Class View, там правой кнопкой на нужном классе и выбираешь Create Instance и выбираешь конструктор
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[9]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 08:48
Оценка:
Простите, где-то видел, но не помню где. Эта база, Northwind — это вроде какая-то стандартная, кот. поставляется вместе c MSSQL? Т.е. надо поставить последнее, дабы получить первое?

G>
G>    static void Main(string[] args)
G>    {
G>        NorthwindDataContext db = new NorthwindDataContext();
G>        var customers = from c in db.Customers select c;
G>        foreach (var cust in customers)
G>        {
G>            Console.WriteLine("Customer {0} ID = {1}", cust.ContactName, cust.CustomerID);
G>            foreach (var order in cust.Orders)
G>            {
G>                Console.WriteLine(" Order Date = {0}", order.OrderDate);
G>                foreach (var orderDetail in order.Order_Details)
G>                {
G>                    Console.WriteLine("    Product {0} Quantity = {1}", orderDetail.Product.ProductName, orderDetail.Quantity);
G>                }
G>            }
G>            Console.WriteLine();
G>        }
G>        Console.ReadKey();
G>    }
G>


G>Класс NorthwindDataContext сгенерил с помощью студии, тупо перетащив в дизайнер все таблицы из базы. БД — Northwind от Microsoft.

кхэх... и это всё? Т.е. всё, что надо сделать это:
var customers = from c in db.Customers select c;

?

ммм. появилось вопросов больше, чем было (что впринципе логично, при вхождении в новую область).
1. Но насколько я понимаю, в этом случае из базы выгребается ВСЁ, что связано с таблицей Customers?
2. или же необходимые данные выбираются по мере обращения к членам объекта customers?
Re[6]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 08:53
Оценка:
_B_>>Я, правда, должен признаться не смог её запустить (может подскажете как? — не могу в неё класс закинуть для конструирования).

_>Открываешь окошко Class View, там правой кнопкой на нужном классе и выбираешь Create Instance и выбираешь конструктор


ну да, это я читал. Но когда я делаю "правой кнопкой на нужном классе", то в контекстном меню нет пункта "Create Instance"...?
Клас — примитивнейший.
    public class C1
    {
        public C1(int a)
        { A=a; }

        public int A { get; set; }
    }
Re[10]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 13.01.08 09:06
Оценка:
Здравствуйте, _Budda_, Вы писали:

_B_>Простите, где-то видел, но не помню где. Эта база, Northwind — это вроде какая-то стандартная, кот. поставляется вместе c MSSQL? Т.е. надо поставить последнее, дабы получить первое?


G>>
G>>    static void Main(string[] args)
G>>    {
G>>        NorthwindDataContext db = new NorthwindDataContext();
G>>        var customers = from c in db.Customers select c;
G>>        foreach (var cust in customers)
G>>        {
G>>            Console.WriteLine("Customer {0} ID = {1}", cust.ContactName, cust.CustomerID);
G>>            foreach (var order in cust.Orders)
G>>            {
G>>                Console.WriteLine(" Order Date = {0}", order.OrderDate);
G>>                foreach (var orderDetail in order.Order_Details)
G>>                {
G>>                    Console.WriteLine("    Product {0} Quantity = {1}", orderDetail.Product.ProductName, orderDetail.Quantity);
G>>                }
G>>            }
G>>            Console.WriteLine();
G>>        }
G>>        Console.ReadKey();
G>>    }
G>>


G>>Класс NorthwindDataContext сгенерил с помощью студии, тупо перетащив в дизайнер все таблицы из базы. БД — Northwind от Microsoft.

_B_>кхэх... и это всё? Т.е. всё, что надо сделать это:
_B_>
_B_>var customers = from c in db.Customers select c;
_B_>

_B_>?
Ну как видишь.

_B_>ммм. появилось вопросов больше, чем было (что впринципе логично, при вхождении в новую область).

_B_>1. Но насколько я понимаю, в этом случае из базы выгребается ВСЁ, что связано с таблицей Customers?
_B_>2. или же необходимые данные выбираются по мере обращения к членам объекта customers?

Профайлер показал что на каждый foreach по одному запросу. То есть кастомеры считываются один раз, orders выбирается столько раз, сколько кастомеров, с фильтром по ключу естественно, итд
Re[11]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 09:21
Оценка:
G>Профайлер показал что на каждый foreach по одному запросу. То есть кастомеры считываются один раз, orders выбирается столько раз, сколько кастомеров, с фильтром по ключу естественно, итд
Т.о. код
var customers = from c in db.Customers select c;

выполняет создание контейнера и выбирает его записи из таблицы Customers. При обращении к его заказам
foreach (var order in cust.Orders)

в момент cust.Orders выполняется аналогичная операция уже для заказов. Но вопрос: кто выполняет новый поход в БД? ЛинКью? Или член Orders класса Customers? ИМХО последнее. Но он опять же юзает ЛинКью:
как-то так
var _orders = from o in db.Orders select o;


Подумаю вслух:

Если раньше для подобной операции мне надо было сделать:

public abstract class ACustomers{
// описать привязку полям к членам
}
List<ACustomers> customers ;
using (DbManager db = new DbManager())
{
  customers = db
    .SetCommand("SELECT Id, Name, ... FROM customers")// или SetSpCommand("GetCustomers")
    .ExecuteList<ACustomers>()
    ;
}

То теперь... создавать класс для меня будет студия, а формировать и выполнять запрос ЛинКью.

Не могу понять только нюанс создания классов: ЧТО ИМЕННО выполняет эту функцию. То что это делает студия понятно, но какая её часть?
Re[12]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 13.01.08 09:35
Оценка:
Linq2SQL это не язык запросов к БД, это набор классов, методов расширения и атрибутов, которые позволяют с помощью языка запросов Linq обращаться к БД.
Фактически всю работу по загрузке связанных таблиц выполняет класс EntitySet.
Re[12]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: Аноним  
Дата: 13.01.08 09:39
Оценка:
Здравствуйте, _Budda_, Вы писали:

люди, вы сейчас какими-то домыслами занимаетесь
почитайте хоть что-нибудь про linq
посмотрите хотя бы 9 частей рассказа про Linq от Scott Guthrie
LINQ to SQL (Part 9 &mdash; Using a Custom LINQ Expression with the &lt;asp:LinqDatasource&gt; control) (это 9-ая часть, но та есть ссылкы не все предыдущие)

прочтите раздел MSDN про linq, там не очень много, если английского совсем не знаете, то хотя бы посмотрите картинки и повыполняйте приводимые примеры
посмотрите, что в отладчике происходит с вашим запросом
не додумывайте технологии, а просто изучайте
Re[13]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 09:42
Оценка:
B>>То теперь... создавать класс для меня будет студия, а формировать и выполнять запрос ЛинКью.
G>Linq2SQL это не язык запросов к БД, это набор классов, методов расширения и атрибутов, которые позволяют с помощью языка запросов Linq обращаться к БД.
Это я понимаю
G>Фактически всю работу по загрузке связанных таблиц выполняет класс EntitySet.
А EntitySet — класс из System.Linq, верно?

Собственно не вопрос, какой именно класс загружает данные. Главное, что кто-то из System.LinQ.

Сумбур (для меня) внесло использование генерируемых студией классов... я просто не знаю их внутренностей... потому и возникают вопросы...
Re[13]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 09:50
Оценка:
Английский знаю, почитаю обязательно, спасибо.

Мне просто чтобы посмотреть надо поставить MS SQL... потому задаю вопросы человеку, которому на них интересно отвечать...
А>не додумывайте технологии, а просто изучайте
А что мы додумываем? Что в примере gandjustas'а додуманного?
Re[14]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 13.01.08 10:07
Оценка:
Здравствуйте, _Budda_, Вы писали:

G>>Фактически всю работу по загрузке связанных таблиц выполняет класс EntitySet.

_B_>А EntitySet — класс из System.Linq, верно?
System.Data.Linq

Linq2Sql это сборка System.Data.Linq.dll


_B_>Собственно не вопрос, какой именно класс загружает данные. Главное, что кто-то из System.LinQ.

_B_>Сумбур (для меня) внесло использование генерируемых студией классов... я просто не знаю их внутренностей... потому и возникают вопросы...
А посмотреть?
Re[15]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 10:10
Оценка:
_B_>>Собственно не вопрос, какой именно класс загружает данные. Главное, что кто-то из System.LinQ.
_B_>>Сумбур (для меня) внесло использование генерируемых студией классов... я просто не знаю их внутренностей... потому и возникают вопросы...
G>А посмотреть?
Обязательно посмотрю. Но щас нет под рукой установленной MSSQL с базой, чтобы посмотреть
Re[7]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: denisio_mcp  
Дата: 13.01.08 11:21
Оценка:
Здравствуйте, _Budda_, Вы писали:

_B_>ну да, это я читал. Но когда я делаю "правой кнопкой на нужном классе", то в контекстном меню нет пункта "Create Instance"...?


Редакция VS2008 какая? Оно доступно только в Team-редакциях.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[8]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 12:03
Оценка:
Здравствуйте, denisio_mcp, Вы писали:

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


_B_>>ну да, это я читал. Но когда я делаю "правой кнопкой на нужном классе", то в контекстном меню нет пункта "Create Instance"...?


_>Редакция VS2008 какая? Оно доступно только в Team-редакциях.

TS редакция, тим юниты есть... Вид TestBench есть, в нём написано то же, что ты мне советовал выше... но добавить туда чего-то не получается
Re[8]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: _Budda_ Украина http://vfm.1gb.ru
Дата: 13.01.08 12:08
Оценка:
_>Редакция VS2008 какая? Оно доступно только в Team-редакциях.
Полез в "About" а там куча всего... может и нет того, что нужно для Test Bench. Посмотри, плиз.

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5

Installed Edition: Enterprise

Microsoft Visual Basic 2008 хххх-ххх-ххххххх-ххххх
Microsoft Visual Basic 2008

Microsoft Visual C# 2008 хххх-ххх-ххххххх-ххххх
Microsoft Visual C# 2008

Microsoft Visual C++ 2008 хххх-ххх-ххххххх-ххххх
Microsoft Visual C++ 2008

Microsoft Visual Studio 2008 Tools for Office хххх-ххх-ххххххх-ххххх
Microsoft Visual Studio 2008 Tools for Office

Microsoft Visual Studio Team System 2008 Architecture Edition хххх-ххх-ххххххх-ххххх
Microsoft Visual Studio Team System 2008 Architecture Edition

Microsoft Visual Studio Team System 2008 Database Edition хххх-ххх-ххххххх-ххххх
Microsoft Visual Studio Team System 2008 Database Edition

Microsoft Visual Studio Team System 2008 Development Edition хххх-ххх-ххххххх-ххххх
Microsoft Visual Studio Team System 2008 Development Edition

Portions of International CorrectSpell™ spelling correction system © 1993 by Lernout & Hauspie Speech Products N.V. All rights reserved.

The American Heritage® Dictionary of the English Language, Third Edition Copyright © 1992 Houghton Mifflin Company. Electronic version licensed from Lernout & Hauspie Speech Products N.V. All rights reserved.


Microsoft Visual Studio Team System 2008 Test Edition хххх-ххх-ххххххх-ххххх
Microsoft Visual Studio Team System 2008 Test Edition

Microsoft Visual Web Developer 2008 хххх-ххх-ххххххх-ххххх
Microsoft Visual Web Developer 2008

Crystal Reports AAJ60-G0MSA4K-68000CF
Crystal Reports Basic for Visual Studio 2008

Re[9]: К вопросу о LINQ to SQL и O/R Mapper-ах
От: denisio_mcp  
Дата: 13.01.08 16:14
Оценка:
Здравствуйте, _Budda_, Вы писали:

_>>Редакция VS2008 какая? Оно доступно только в Team-редакциях.

_B_>Полез в "About" а там куча всего... может и нет того, что нужно для Test Bench. Посмотри, плиз.

Странно, один в один как у меня...
... << RSDN@Home 1.2.0 alpha rev. 0>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.