Linq & DataSet
От: Аноним  
Дата: 27.06.10 11:06
Оценка:
Что лучше использовать язык запросов или методы?
Re: Linq & DataSet
От: Lloyd Россия  
Дата: 27.06.10 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что лучше использовать язык запросов или методы?


Когда можно ограничиться запросами — то запросы. В оставшихся случая — методы.
Re: Linq & DataSet
От: xobotik Россия  
Дата: 27.06.10 11:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что лучше использовать язык запросов или методы?


То есть?

Так
var a = array.Where(n => n > 10);

или так
var a = (from n in array
         where n > 10
         select n);
С уважением!
Re[2]: Linq & DataSet
От: Аноним  
Дата: 27.06.10 11:38
Оценка:
Здравствуйте, xobotik, Вы писали:

X>Здравствуйте, Аноним, Вы писали:


А>>Что лучше использовать язык запросов или методы?


X>То есть?


X>Так

X>
X>var a = array.Where(n => n > 10);
X>

X>или так
X>
X>var a = (from n in array
X>         where n > 10
X>         select n);
X>



Спасибо. А подскажите ещё пожалуйста вот этот код правильный:

DataSet1 dataSet = new DataSet1();
            String family = "Пупкин";
            //находим id манагера
            int id = (int)dataSet.Managers.Single(i => (String)i[dataSet.Managers.ManagersNameColumn] == family)
            [dataSet.Managers.ManagersIdColumn];
            //выбираем клиетов у которых id манагер равер найденому
            IEnumerable<DataSet1.CustomersRow> rows =
            dataSet.Customers.Where(i => (int)i[dataSet.Customers.ManagersIdColumn] == id);


Тут простая БД со связью Managers — Customers 1 к многим. Правильно ли я нахожу всех клиентов "Пупкина"
И ещё такой вопрос: "Нужно ли можно методы Linq вкладывать в друг друга(в сети видел такой код) или лучше
все выполнять по порядку?" Книжка есть вот с практикой плохо.
Заранее спасибо.
Re[3]: Linq & DataSet
От: Аноним  
Дата: 27.06.10 11:47
Оценка:
Здравствуйте, Аноним, Вы писали:

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


X>>Здравствуйте, Аноним, Вы писали:


А>>>Что лучше использовать язык запросов или методы?


X>>То есть?


X>>Так

X>>
X>>var a = array.Where(n => n > 10);
X>>

X>>или так
X>>
X>>var a = (from n in array
X>>         where n > 10
X>>         select n);
X>>



А>Спасибо. А подскажите ещё пожалуйста вот этот код правильный:


А>
А>DataSet1 dataSet = new DataSet1();
А>            String family = "Пупкин";
А>            //находим id манагера
А>            int id = (int)dataSet.Managers.Single(i => (String)i[dataSet.Managers.ManagersNameColumn] == family)
А>            [dataSet.Managers.ManagersIdColumn];
А>            //выбираем клиетов у которых id манагер равер найденому
А>            IEnumerable<DataSet1.CustomersRow> rows =
А>            dataSet.Customers.Where(i => (int)i[dataSet.Customers.ManagersIdColumn] == id);
А>


А>Тут простая БД со связью Managers — Customers 1 к многим. Правильно ли я нахожу всех клиентов "Пупкина"

А>И ещё такой вопрос: "Нужно ли можно методы Linq вкладывать в друг друга(в сети видел такой код) или лучше
А>все выполнять по порядку?" Книжка есть вот с практикой плохо.
А>Заранее спасибо.

Да забыл добавить в SQL можно сделать аналогичный запрос в котором ели такого менеджера нет
он не вернёт список клиентов, а моём примере буде эксепшн. Если способ красиво это обойти?
Re[3]: Linq & DataSet
От: xobotik Россия  
Дата: 27.06.10 11:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тут простая БД со связью Managers — Customers 1 к многим. Правильно ли я нахожу всех клиентов "Пупкина"


Отвечу позже =) надо попробовать)

А>И ещё такой вопрос: "Нужно ли можно методы Linq вкладывать в друг друга(в сети видел такой код) или лучше


Вкладывать друг в друга — то есть подзапросы как я понял. Использовать подзапросы к удаленным источникам, то есть БД — это отлично. Причина: запрос будет обработан как единое целое, а данные будут следовать на сервер и обратно только один раз. К локальным коллекциям с точки зрения производительности — это относительно плохо. Причина: ибо подзапрос будет выполняться на каждом шаге внешнего цикла.

А>все выполнять по порядку?" Книжка есть вот с практикой плохо.

А>Заранее спасибо.

X>>Так

X>>
X>>var a = array.Where(n => n > 10);
X>>

X>>или так
X>>
X>>var a = (from n in array
X>>         where n > 10
X>>         select n);
X>>


Это я у вас спрашивал, что вы имели ввиду под своим вопросом. Ну то есть есть синтаксис облегчающий восприятие запроса — это собственно второе. А есть синтаксис использующий расширяющие методы, то есть первое. В случае БД лучше использовать синтаксис облегчающий восприятие (на самом деле дело вкуса). Я допустим использую смешанный синтаксис к локальным коллекциям (но чаще использую расширяющие методы), к БД облегчающий восприятие. Это ситуация так называемая — синтаксический сахар))
С уважением!
Re[4]: Linq & DataSet
От: Аноним  
Дата: 27.06.10 11:53
Оценка:
Здравствуйте, xobotik, Вы писали:

X>Здравствуйте, Аноним, Вы писали:


А>>Тут простая БД со связью Managers — Customers 1 к многим. Правильно ли я нахожу всех клиентов "Пупкина"


X>Отвечу позже =) надо попробовать)


А>>И ещё такой вопрос: "Нужно ли можно методы Linq вкладывать в друг друга(в сети видел такой код) или лучше


X>Вкладывать друг в друга — то есть подзапросы как я понял. Использовать подзапросы к удаленным источникам, то есть БД — это отлично. Причина: запрос будет обработан как единое целое, а данные будут следовать на сервер и обратно только один раз. К локальным коллекциям с точки зрения производительности — это относительно плохо. Причина: ибо подзапрос будет выполняться на каждом шаге внешнего цикла.


А>>все выполнять по порядку?" Книжка есть вот с практикой плохо.

А>>Заранее спасибо.

X>>>Так

X>>>
X>>>var a = array.Where(n => n > 10);
X>>>

X>>>или так
X>>>
X>>>var a = (from n in array
X>>>         where n > 10
X>>>         select n);
X>>>


X>Это я у вас спрашивал, что вы имели ввиду под своим вопросом. Ну то есть есть синтаксис облегчающий восприятие запроса — это собственно второе. А есть синтаксис использующий расширяющие методы, то есть первое. В случае БД лучше использовать синтаксис облегчающий восприятие (на самом деле дело вкуса). Я допустим использую смешанный синтаксис к локальным коллекциям (но чаще использую расширяющие методы), к БД облегчающий восприятие. Это ситуация так называемая — синтаксический сахар))


Спасибо, теперь всё понятно.
Re[4]: Linq & DataSet
От: xobotik Россия  
Дата: 27.06.10 12:00
Оценка:
Здравствуйте, Аноним, Вы писали:

Да и в вашем случае можно придерживаться такой схеме организации запроса к БД (ну мне так проще):
...
using System.Data.Linq;
using Systen.Linq;
using System.Data.Linq.Mapping;

// есть у нас вот такая таблица 
[Table]
public class Employee
{
    [Column(IsPrimaryKey = true)]
    public int ID;
    [Column]
    public string firstName;
    [Column]
    public string lastName;
}

static void Main()
{
    // коннект стринг нужно указать в ""
    var dataContext = new DataContext("");
    Table<Employee> employees = dataContext.GetTable<Employee>();
    IQueryable<string> query = from e in employees
                               where e.firstName.Contains("65756")
                               select e;
    // отображение результата запроса
    foreach (string firstName in query)
    {
        Console.WriteLine(firstName);
    }
}


Конечно же в ручную можно не прописывать вот это:
// есть у нас вот такая таблица 
[Table]
public class Employee
{
    [Column(IsPrimaryKey = true)]
    public int ID;
    [Column]
    public string firstName;
    [Column]
    public string lastName;
}

А воспользоваться маппером среды.
Более подробно как им пользоваться могу рассказать, если надо.

P.S. От var'ов надо еще избавиться=)
С уважением!
Re[4]: Linq & DataSet
От: xobotik Россия  
Дата: 27.06.10 12:17
Оценка:
Здравствуйте, xobotik, Вы писали:

X>Отвечу позже =) надо попробовать)


Запрос на LINQ должен выглядеть приблизительно так (не отлаживал, написал на коленке без среды — то есть доработайте сами, будет очень полезно):
        public static IEnumerable<string> Get(DataSet dataSet)
        {
            return (from n in dataSet.Customers
                    where dataSet.Customers.ManagersIdColumn == 
                        (from n1 in dataSet.Managers                                                                 
                         where dataSet.Managers.ManagersNameColumn == "Пупкин"                                                                 
                         select n1) // ->> надо выбрать ID
                    select n);
        }


Рефакторы нужно применить следующее:
1) Выделить метод;
2) Выделить магические литералы;
3) Переименовать подобающим образом;
4) Посмотреть в сторону LINQ углубленно про into, let, select new.
Да и почитайте книгу про LINQ Автора: Джозеф Албахари, Бен Албахари — "Linq. Карманный справочник."
С уважением!
Re[5]: Linq & DataSet
От: Аноним  
Дата: 27.06.10 12:33
Оценка:
Здравствуйте, xobotik, Вы писали:

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


X>>Отвечу позже =) надо попробовать)


X>Запрос на LINQ должен выглядеть приблизительно так (не отлаживал, написал на коленке без среды — то есть доработайте сами, будет очень полезно):

X>
X>        public static IEnumerable<string> Get(DataSet dataSet)
X>        {
X>            return (from n in dataSet.Customers
X>                    where dataSet.Customers.ManagersIdColumn == 
X>                        (from n1 in dataSet.Managers                                                                 
X>                         where dataSet.Managers.ManagersNameColumn == "Пупкин"                                                                 
X>                         select n1) // ->> надо выбрать ID
X>                    select n);
X>        }
X>


X>Рефакторы нужно применить следующее:

X>1) Выделить метод;
X>2) Выделить магические литералы;
X>3) Переименовать подобающим образом;
X>4) Посмотреть в сторону LINQ углубленно про into, let, select new.
X>Да и почитайте книгу про LINQ Автора: Джозеф Албахари, Бен Албахари — "Linq. Карманный справочник."

Спасибо за совет. Буду читать.
Re[6]: Linq & DataSet
От: xobotik Россия  
Дата: 27.06.10 12:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо за совет. Буду читать.


Если какое-либо сообщение понравилось (информативное, помогло к решению задачи или еще что-то), можно оценку поставить) Буду очень благодарен))
С уважением!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.