|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Добрый вечер. Мне нужно с помощью linq2entities достать данные из таблицы, отсортированные по определенному алгоритму. Если в кратце, то сортировка идет взависимости от значений двух полей таблицы. К пример, есть два поле: Поле1, Поле2 Условия такие 1. Поле1==null, Поле 2>20 2. Поле1!=null, Поле 2<20 3. Поле1==null, Поле 2<20 и т.д. На самом деле условия другие и их около 8ми, но суть ясна. Нужно отсортировать в таком порядке. У меня пока только такая идея: выбрать все записи, затем в цикле присвоить вспомогательному полю LogicalStatus значение(от 1 до 8ми, взависимости от полей 1 и 2), а затем обычный OrderBy по этому полю. Решение верное? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2011, 23:48 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
сколько данных будет в выборке, как потом их будете использовать? если записей будет не много (скажем 1000) и не собираетесь прямо в гриде редактировать, то проще дернуть их на клиента и через Enumerable.OrderBy отсортировать с помощью соотвествующего IComparer ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 00:45 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
>сколько данных будет в выборке, как потом их будете использовать? конкретно клиенту будет посылаться до 10ти записей(для плагина jqGrid), но ведь они сначала всеравно должны быть отсортированы. >OrderBy отсортировать с помощью соотвествующего IComparer Ммм, не пользовался, сейчас почитаю про это. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 10:26 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
но ведь они сначала всеравно должны быть отсортированы. мое предложение: - из базы вы записи выбираете несортированными через l2ef (фактически конструируя IQueryable без Queryable.OrderBy, который к тому же далеко не всякий IComparer поймет) - выбранные записи сохраняются в памяти в виде EntitySet-ов, которые реализуют интерфейс IEnumerable - уже в памяти вы их сортируете с помощью Enumerable.OrderBy (это совсем не тот OrderBy, что был в запросе l2ef), которому можно подсунуть сколь угодно сложный IComparer, и отправляете клиенту. в качестве дополнительного бонуса немножко разгружаете базу, переносите часть нагрузки на веб сервер, который можно дешево горизонтально масштабировать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2011, 14:12 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
С этим разобрался, все работает. Но есть еще одна задачка, с хп. Допустим есть такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Смысл: во время выборки создаем новое поле(LogicalStatus), и взависимости от текущих данных присваиваем ему статус (число), эти статусы хранятся в другой таблице. Задача: добавить в выборку еще и имя этого статуса, т.е. присоединить таблицу (в данном примере - MYSTATUSES) по LogicalStatus. Приведенный код не работает: "Недопустимое имя столбца LogicalStatus" Причина видимо в том, что LogicalStatus создается в запросе, в таблицах его нет. Кто подскажет, как исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 14:22 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Boneshock Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Нельзя в одном запросе делать и выборку и присвоение значения полю. Может быть вам надо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 18:32 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Та же ошибка. Сформулирую что мне нужно: Есть таблица. При выборке данных из нее мне нужно сформировать два поля - LogicalStatus(числовое) и LogicalName(текствое). В исходной таблице их нету, но они должны быть на выходе. LogicalStatus формируется взависимости от значения других полей, для этого я использую конструкцию WHEN-THEN, а LogicalName нужно взять из другой таблицы по значению LogicalStatus. Желательно так. На крайний случай(поскольку значения LogicalName известны) можно LogicalName не брать из таблицы а формировать прямо в запросе, но как это сделать в одной конструкции CASE я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 19:27 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Boneshock"Недопустимое имя столбца LogicalStatus" Обычно эта ошибка возникает когда в участвующих в выборке таблицах есть поля с одинаковым именем. Илинет вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 21:35 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Cat2Илинет вообще. Этих столбцов(LogicalStatus и LogicalName) действительно нету(и не может быть, поскольку они напрямую зависят от текущего времени, например, и должны формироваться при запросе), я писал об этом. Они должны быть только в результирующем наборе данных. LogicalStatus я опереляю в конструкции CASE, проблема в том, как правильно дать значение полю LogicalName. Я создал дополнительно таблицу, по которой думал можно будет провести связь(по LogicalStatus), но видимо так нельзя сделать. Как же мне его(LogicalName) определить тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2011, 22:24 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Boneshock, 1006908 Рекомендации по оформлению сообщений в форуме 6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения: - скрипты создания таблиц; - скрипты заполнения этих таблиц тестовыми данными; - описание желаемого результата на примере тестовых данных. (эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность. Вот пример хорошего стиля ) Подумайте также над тем, чтобы описать решаемую Вами задачу целиком. Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым. Например, вместо вопроса "Как добавить несколько полей в системную таблицу sysusers?" лучше спросить "Как мне хранить дополнительную информацию, привязанную к пользователю бд? Можно ли для этого использовать системную таблицу sysusers?" (Пример НЕправильно оформоленного вопроса) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 07:52 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Да я вроде бы и так все максимально подробно описал. Разве что-то непонятно? Первая таблица, основаная: куча полей(в которых НЕТ полей LogicalStatus и LogicalName), вторая таблица: два поля, Id и Name(айди и имя логич. статуса). Задача: сделать выборку полей из основной таблицы, при этом добавив в результирующий набор два новых поля: id логич. статуса и его имя. Id нужно выбрать взависимости от различных условий, для этого я использую конструкцию CASE и в ней присваиваю полю LogicalStatus(это айди логич. статуса) значение(числовое). LogicalName нужно взять из второй таблицы по значению LogicalStatus, как это сделать я не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 10:44 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
BoneshockДа я вроде бы и так все максимально подробно описал. Разве что-то непонятно? Телепаты в отпуске. Увы. То что понятно Вашему мозгу, непонятно мне, например. Какие таблицы, сколько их, что скрывается под Код: plaintext 1. 2. 3.
тайна сия непонятна простым смертным. Хотите ответ - выполните условия оформления вопроса. Cat2Рекомендации по оформлению сообщений в форуме6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения: - скрипты создания таблиц; - скрипты заполнения этих таблиц тестовыми данными; - описание желаемого результата на примере тестовых данных. (эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность. Вот пример хорошего стиля ) Подумайте также над тем, чтобы описать решаемую Вами задачу целиком. Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым. Например, вместо вопроса "Как добавить несколько полей в системную таблицу sysusers?" лучше спросить "Как мне хранить дополнительную информацию, привязанную к пользователю бд? Можно ли для этого использовать системную таблицу sysusers?" (Пример НЕправильно оформоленного вопроса) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 22:00 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
Boneshock, неужели сложно адекватно оформить конкретный рабочий SQL-запрос с определёнными пожеланиями? Воду в ступе толочь можете попросить свою бабушку, а здесь лучше по существу проблемы излагать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 22:25 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
ёклмн, да на пальцах уже объяснил, что тут непонятного то? Таблица 1: Код: plaintext 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Задача: впихнуть в результирующий набор поле StatusName из [Table2] по значению LogicalStatus(т.е. когда Id=LogicalStatus) МСУ, причем тут бабушки со ступой, я объяснил задачу человеческим языком, он вам уже непонятен чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 23:37 |
|
Нестандартная сортировка в linq2entities
|
|||
---|---|---|---|
#18+
И да: Cat2Какие таблицы, сколько их, что скрывается под Код: plaintext 1. 2. 3.
тайна сия непонятна простым смертным. Да какая разница что там, зачем вам эта лишняя информация? Таблиц две, это ясно из всех моих сообщений. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 01:57 |
|
|
start [/forum/topic.php?fid=17&fpage=41&tid=1350618]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 136ms |
0 / 0 |