|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
Есть ,скажем так ,два source с данными : 1. var colguid = new List<Guid>(); в котором несколько десятков тысяч ... 2. var rLists = (IQueryable<Qwerty>)new XPQuery<Qwerty>(session); // примочка от DevExpress Не могу что то соображить как организовать linq -запрос между двумя этими наборами данных ( Суть в том, чтобы написать select который будет ограничивать rLists только теми записями которые есть в коллекции colguid пробовал так : var rData = rLists .OrderBy(el => el.Исполнитель.Код) .Where(el => colguid.Contains(el.Oid )) //если ли el.Oid внутри colguid ? .Where(el => el.Исполнитель !=null) .Select..... но напоролся на то что при выполнении так нельзя : el => colguid.Contains(el.Oid ) интерпретируется в кучу параметров и там их больше чем 2 с небольшим тыщи не может быть в LINQ (( Прошу помочь с решением оптимальным (может заJOIN-нить как то между собой в запросе эти два набора данных ? не получается это сделать тоже - не пойму что написать на ключе внешнем у colguid ) p.s. c LINQ знаком поверхностно ( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 18:01 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
недавно такое обсуждали, оптимальное решение ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2013, 21:52 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
LR, Спасибо...да, с листами работает. А в моем варианте что то нет. Попробовал : var rData = rLists .OrderBy(el => el.Исполнитель.Код) .Where( el => colguid.Exists(xx => xx == el.Oid)) .Where(el => el.Исполнитель !=null) .Select..... все компиляется, но при выполнении говорят что указанный метод не поддерживается ... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 11:06 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
LR, попробовал join простой var rData = from c in rLists join c2 in colguid on c.Oid equals c2 select c; а так при выполнении получаю : "Ссылка на объект не указывает на экземпляр объекта." ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 11:33 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
bormental, IQueryable : IEnumerable, поэтому не должно быть никаких проблем... var rData = rLists.Join(colguid, a => a.Oid, b => b, (a, b) => a) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 17:26 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
LR, Верно, Интерфейс IQueryable наследует интерфейс IEnumerable. Но проблема имеет место почему то быть.. Вычитал в книжке одной следующее : авторДля обращения к источнику данных по запросу, формированному средствами LINQ, в этом источнике данных должен быть реализован интерфейс IEnumerable. Он имеет две формы обобщенную и необобщенную. Как правило, работать с источником данных легче, если в нем реализуется обобщенная форма IEnumerable<T>.....Тип переменной диапозона должен соответствовать типу элементов, хранящихся в источнике данных. Следовательно, тип переменной диапозона зависит от типа источника данных. Как правило, тип переменной диапазона может быть выведен средствами C#. Но выводимость типов м.б. осуществлена при условии, что в источнике данных реализована форма интерфейса IEnumerable<T>. Но если в источнике данных реализован необобщенный вариант интерфейса IEnumerable, то тип переменной диапозона придется указывать явно. И это делается в операторе from как я понимаю, IQueryable и есть необощенный вариант интерфейса IEnumerable ? Если приводить непосредственно в linq-запросе rLists к Enumerable вот так : var repairListsData = repairLists.AsEnumerable().Join(colguid, a => a.Oid, b => b, (a, b) => a); то пропадает исключение "Ссылка на объект не указывает на экземпляр объекта." , если без AsEnumerable, то выкидывает исключение такое предложение. Но все равно, когда с AsEnumerable то что то не работает (jpg прилагаю что кажет...) Позволю себе еще подробнее привести код colguid(но вроде он сразу IEnumerable, т.к. он List ) : Guid curGuid; var colguid = new List<Guid>(); foreach(var pl in documentOids2) { curGuid=(Guid)pl.GetValue(0); colguid.Add(curGuid); } ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 20:26 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 20:29 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
bormental, ты исходи из того, что одно перечисление у тебя локально ( несколько десятков тысяч ) а другое на сервер которое надо вытащить согласно локальному перечислению. и каково же вида должен быть запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 20:55 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
мне вот просто интересно, откуда эти данные взялись локально, или их пользователь набил в ручную, или пришли через soa или вы их с хранилища вытащили? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 21:02 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
Где-то в степи, Ага..они предварительно вытащены из БД и сохранены в List авторты исходи из того, что одно перечисление у тебя локально ( несколько десятков тысяч ) а другое на сервер которое надо вытащить согласно локальному перечислению. и каково же вида должен быть запрос? не понимаю, наверное, к чему Вы клоните... да, хочется, как я и грил открывая тему, ограничить получаемый набор данных с сервера БД этим локальным перечислением. Я многого хочу ? LINQ такое не умеет ? Вроде как в качестве data-source в соответствующей части конструкции linq-запроса может быть все вплоть до обычного массива... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 23:10 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
bormental, ограничить?, а как будет выглядеть запрос sql с несколько десятками тысяч параметров ? можно конечно бла бла.ToLost().Join - но если на локали несколько десятков тысяч то в листе окажется десятки сотен тысяч, а клоню я к тому, что смысл тащить на клиента в таких межгалактических расчетах этот лист, задача решается индексами и хранимой процедурой на сервере, он и заточен под это... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2013, 23:34 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
Где-то в степи, Спасибо. Хреново если так...Я тут, видимо наивно, полагал что LINQ вытянешь из первого источника данные на клиента и пофильтрует на нем уже ) А сохранять в List конечно совсем не гуд данные первого источника. Интересно, а тут кто с XAF от DevExpress развлекался есть народ.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2013, 09:56 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
Спрошу здесь опять..чтоб топик не создавать. почему когда используешь LINQ, где в качестве источника выступает множество, в котором есть поле null, то в дальнешем(когда в linq по этому полю расписано некое условие...), при обращении к описанному LINQ-выражению огребаешь ошибку всегда аля ""ссылка не указывает на ....". Если готовишь в качестве истоника для линк запроса результат от того же SQL сервера - то вполне в резалтсете от него может прийти Null в какой то поле. т.е. вот так приходиться делать : Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
если же сделать так : Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
то с ошибкой будет такой запрос выполнен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 12:35 |
|
Linq запрос по двум источникам данных
|
|||
---|---|---|---|
#18+
bormental, Вы что, пошутили? Пошучу и я: Null - это как бы нифуя, нифуя тоже результат, если десять нифуя - уже что то, прально? А если с этим одним нифуя приходится как то поработать, спросить к примеру что он содержит, естественно исполняемый код визжит что его пытаются обмануть ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 14:34 |
|
|
start [/forum/topic.php?fid=17&msg=38491841&tid=1349878]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 230ms |
0 / 0 |