|
|
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
Есть DataContext. Есть запрос типа Код: plaintext 1. Далее идут несколько уточнений типа Код: plaintext 1. 2. Потом идёт следующий цикл: Код: plaintext 1. Затем я хочу обратиться к базе данных и забрать необходимые мне элементы посредством Код: plaintext НО данные мне не возвращаются. Если же я в цикле в WHERE запросе вручную укажу ID моего объекта, то данные мне вернутся. Я предполагаю, что т.к. LINQ запрос - отложенный, то в цикле, указывая COLUMN_ID=myObject.ID (где myObject - итеративный объект), при получении данных я уже потеряю контекст данного объекта. Я пробовал делать цикл for(int i = ....) Но я ловил исключение, что данного индекса в коллекции не существует, что даёт мне предпосылки предполагать что LINQ не сохраняет ЗНАЧЕНИЕ, а лишь ССЫЛКУ на него, т.е. каждый раз запрашивает myObject.ID, которого уже нету в данном контексте. Буду благодарен дельному совету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 19:35 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
umluser, почитайте про динамическое построение запросов. Добавлять условия просто проходя в коде разные участки не получится. Надо динамически построит LINQ запрос, а потом его вызвать. Класс System.Linq.Expressions.Expression смотрите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 19:51 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
umluser, Может быть вас выручит вложенный запрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 19:52 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
D129, чтобы яснее обрисовать ситуацию... Нужно организовать поиск/фильтр по документам. Есть структурка типа Document, в ней присутствуют некоторые основные параметры документа, которые я ищу в 1й части запроса, добавляя q = q.Where(...) к нему. Потом я хочу обработать каждый дополнительный атрибут в объекте Document.DocAttributes в зависимости от его типа и значения и добавить условия Where(...) к исходному запросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 19:59 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
umluser Ну да, динамическое построение запроса. вот такой штукой я пользуюсь для поиска в одноуровневом списке. При использовании обертки: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 20:22 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
Можно еще тут почитать. Тоже неплохой метод, мне понравился) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 20:35 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
D129почитайте про динамическое построение запросов. Добавлять условия просто проходя в коде разные участки не получится. это ещё почему? а у меня получается, знаешь ли а мысль автора я что-то ниасилил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2009, 22:49 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
На кой тут динамический линк? Делаю фильтры так: if (условие) { q = q.Where(условие запроса); } if (условие2) { q = q.Where(условие запроса 2); } ... Тем самым мы к квери накладываем несколько условий в зависимости от выбранного пользователем фильтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 07:30 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
СУМНа кой тут динамический линк? Делаю фильтры так: ... Тем самым мы к квери накладываем несколько условий в зависимости от выбранного пользователем фильтра. Ну, это понятно. Я так начал делать даже не подумав - это просто разделение запроса на части. А у меня непосредственный начальник - SQL-щик, и мы с ним долго спорили на тему, что не стоит все пихать в один запрос. И главный его аргумент был - а что, тебе слабо в один запрос все сделать? Вот я и начал углубляться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 09:43 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
D129 Вот я и начал углубляться. Данатас, советую курить динамик линк только в экстренных случаях - низкая производительность запроса (смотрим план выполнения) и когда силами Linq просто невозможно решить задачу. А на банальных выборках с фильтрами, сортировкой, джойнами и прочей ерундой - всё решается намного проще. Хардкод - зло P.S. А насяльника - фтопку, так и передайте )) Модератор: Тема перенесена из форума "C#.NET". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 09:52 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
СУМНа кой тут динамический линк? Делаю фильтры так: if (условие) { q = q.Where(условие запроса); } if (условие2) { q = q.Where(условие запроса 2); } ... Тем самым мы к квери накладываем несколько условий в зависимости от выбранного пользователем фильтра. Я так и делаю, когда обрабатываю ОСНОВНЫЕ атрибуты документа. т.е.типа q = q.Where(blah=>blah.doc_number.Contains("666")); Проблема в том, что условия на дополнительные атрибуты у меня добавляются в цикле for или foreach, например q = q.Where(docattr=>docattr.kattr_id.Equals(someList[i].AttrID)); А когда настаёт черед считывания данных, то используется НЕ значение someList[i], которое было передано в цикле, а ТЕКУЩЕЕ значение someList[i].AttrID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 13:44 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
Есть такая фигня как Contains... можно и так попробовать : Dynamically Composing Expression Predicates ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 13:54 |
|
||
|
LINQ deferred queries
|
|||
|---|---|---|---|
|
#18+
umluser Проблема в том, что условия на дополнительные атрибуты у меня добавляются в цикле for или foreach, например q = q.Where(docattr=>docattr.kattr_id.Equals(someList[i].AttrID)); А когда настаёт черед считывания данных, то используется НЕ значение someList[i], которое было передано в цикле, а ТЕКУЩЕЕ значение someList[i].AttrID не слушай тупые советы, а свой вопрос нужно было начинать сразу с этой фразы. вначале прочитай про лямбда-выражения и замыкания , потом пиши так: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2009, 14:31 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=71&tid=1351814]: |
0ms |
get settings: |
7ms |
get forum list: |
22ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 379ms |

| 0 / 0 |
