Здравствуйте, Аноним, Вы писали:
А>Что лучше использовать язык запросов или методы?
То есть?
Так
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 можно сделать аналогичный запрос в котором ели такого менеджера нет
он не вернёт список клиентов, а моём примере буде эксепшн. Если способ красиво это обойти?
Здравствуйте, Аноним, Вы писали:
А>Тут простая БД со связью 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>Это я у вас спрашивал, что вы имели ввиду под своим вопросом. Ну то есть есть синтаксис облегчающий восприятие запроса — это собственно второе. А есть синтаксис использующий расширяющие методы, то есть первое. В случае БД лучше использовать синтаксис облегчающий восприятие (на самом деле дело вкуса). Я допустим использую смешанный синтаксис к локальным коллекциям (но чаще использую расширяющие методы), к БД облегчающий восприятие. Это ситуация так называемая — синтаксический сахар))
Да и в вашем случае можно придерживаться такой схеме организации запроса к БД (ну мне так проще):
...
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;
}
А воспользоваться маппером среды.
Более подробно как им пользоваться могу рассказать, если надо.
Здравствуйте, 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) // ->> надо выбрать IDselect 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. Карманный справочник."