powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Нестандартная сортировка в linq2entities
16 сообщений из 16, страница 1 из 1
Нестандартная сортировка в linq2entities
    #37426186
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер.
Мне нужно с помощью 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 по этому полю.

Решение верное?
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37426209
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько данных будет в выборке, как потом их будете использовать? если записей будет не много (скажем 1000) и не собираетесь прямо в гриде редактировать, то проще дернуть их на клиента и через Enumerable.OrderBy отсортировать с помощью соотвествующего IComparer
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37426430
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>сколько данных будет в выборке, как потом их будете использовать?
конкретно клиенту будет посылаться до 10ти записей(для плагина jqGrid), но ведь они сначала всеравно должны быть отсортированы.
>OrderBy отсортировать с помощью соотвествующего IComparer
Ммм, не пользовался, сейчас почитаю про это.
Спасибо!
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37427075
Вестник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но ведь они сначала всеравно должны быть отсортированы.
мое предложение:
- из базы вы записи выбираете несортированными через l2ef (фактически конструируя IQueryable без Queryable.OrderBy, который к тому же далеко не всякий IComparer поймет)
- выбранные записи сохраняются в памяти в виде EntitySet-ов, которые реализуют интерфейс IEnumerable
- уже в памяти вы их сортируете с помощью Enumerable.OrderBy (это совсем не тот OrderBy, что был в запросе l2ef), которому можно подсунуть сколь угодно сложный IComparer, и отправляете клиенту.

в качестве дополнительного бонуса немножко разгружаете базу, переносите часть нагрузки на веб сервер, который можно дешево горизонтально масштабировать
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37448089
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С этим разобрался, все работает. Но есть еще одна задачка, с хп.
Допустим есть такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT md.*,
LogicalStatus=
CASE
--тут набор условий
ELSE  0 
END,
ms.Name AS 'LogicalName'
FROM [MYDATABASE] md
LEFT JOIN [MYSTATUSES] ms ON ms.Id=LogicalStatus

Смысл: во время выборки создаем новое поле(LogicalStatus), и взависимости от текущих данных присваиваем ему статус (число), эти статусы хранятся в другой таблице. Задача: добавить в выборку еще и имя этого статуса, т.е. присоединить таблицу (в данном примере - MYSTATUSES) по LogicalStatus.
Приведенный код не работает: "Недопустимое имя столбца LogicalStatus"
Причина видимо в том, что LogicalStatus создается в запросе, в таблицах его нет. Кто подскажет, как исправить?
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37448662
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Boneshock
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT md.*,
LogicalStatus=
CASE
--тут набор условий
ELSE 0
END,
ms.Name AS 'LogicalName'
FROM [MYDATABASE] md
LEFT JOIN [MYSTATUSES] ms ON ms.Id=LogicalStatus


Нельзя в одном запросе делать и выборку и присвоение значения полю. Может быть вам надо

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT md.*,
CASE
--тут набор условий
ELSE 0
END as LogicalStatus,
ms.Name AS 'LogicalName'
FROM [MYDATABASE] md
LEFT JOIN [MYSTATUSES] ms ON ms.Id=LogicalStatus
?
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37448748
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же ошибка.
Сформулирую что мне нужно:
Есть таблица. При выборке данных из нее мне нужно сформировать два поля - LogicalStatus(числовое) и LogicalName(текствое). В исходной таблице их нету, но они должны быть на выходе. LogicalStatus формируется взависимости от значения других полей, для этого я использую конструкцию WHEN-THEN, а LogicalName нужно взять из другой таблицы по значению LogicalStatus. Желательно так.
На крайний случай(поскольку значения LogicalName известны) можно LogicalName не брать из таблицы а формировать прямо в запросе, но как это сделать в одной конструкции CASE я не знаю.
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37448901
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Boneshock"Недопустимое имя столбца LogicalStatus"
Обычно эта ошибка возникает когда в участвующих в выборке таблицах есть поля с одинаковым именем. Илинет вообще.
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37448957
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Илинет вообще.
Этих столбцов(LogicalStatus и LogicalName) действительно нету(и не может быть, поскольку они напрямую зависят от текущего времени, например, и должны формироваться при запросе), я писал об этом. Они должны быть только в результирующем наборе данных.
LogicalStatus я опереляю в конструкции CASE, проблема в том, как правильно дать значение полю LogicalName. Я создал дополнительно таблицу, по которой думал можно будет провести связь(по LogicalStatus), но видимо так нельзя сделать. Как же мне его(LogicalName) определить тогда?
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37449103
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Boneshock,

1006908
Рекомендации по оформлению сообщений в форуме 6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения:
- скрипты создания таблиц;
- скрипты заполнения этих таблиц тестовыми данными;
- описание желаемого результата на примере тестовых данных.
(эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность. Вот пример хорошего стиля )
Подумайте также над тем, чтобы описать решаемую Вами задачу целиком. Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым. Например, вместо вопроса "Как добавить несколько полей в системную таблицу sysusers?" лучше спросить "Как мне хранить дополнительную информацию, привязанную к пользователю бд? Можно ли для этого использовать системную таблицу sysusers?"
(Пример НЕправильно оформоленного вопроса)
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37449297
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я вроде бы и так все максимально подробно описал. Разве что-то непонятно?
Первая таблица, основаная: куча полей(в которых НЕТ полей LogicalStatus и LogicalName), вторая таблица: два поля, Id и Name(айди и имя логич. статуса).
Задача: сделать выборку полей из основной таблицы, при этом добавив в результирующий набор два новых поля: id логич. статуса и его имя. Id нужно выбрать взависимости от различных условий, для этого я использую конструкцию CASE и в ней присваиваю полю LogicalStatus(это айди логич. статуса) значение(числовое).
LogicalName нужно взять из второй таблицы по значению LogicalStatus, как это сделать я не знаю.
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37450735
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BoneshockДа я вроде бы и так все максимально подробно описал. Разве что-то непонятно?


Телепаты в отпуске. Увы. То что понятно Вашему мозгу, непонятно мне, например.

Какие таблицы, сколько их, что скрывается под

Код: plaintext
1.
2.
3.
CASE
--тут набор условий
ELSE 0

тайна сия непонятна простым смертным.




Хотите ответ - выполните условия оформления вопроса.
Cat2Рекомендации по оформлению сообщений в форуме6. Если Ваш вопроc связан с созданием какого-то запроса, то предоставление Вами следующих материалов может существенно ускорить нахождение решения:
- скрипты создания таблиц;
- скрипты заполнения этих таблиц тестовыми данными;
- описание желаемого результата на примере тестовых данных.
(эти данные лучше офрмлять с использованием специальных тэгов, которые повысят их читабельность. Вот пример хорошего стиля )
Подумайте также над тем, чтобы описать решаемую Вами задачу целиком. Возможно, что тот способ решения, который Вы стремитесь воплотить в жизнь, не является наилучшим, а лишь кажется Вам таковым. Например, вместо вопроса "Как добавить несколько полей в системную таблицу sysusers?" лучше спросить "Как мне хранить дополнительную информацию, привязанную к пользователю бд? Можно ли для этого использовать системную таблицу sysusers?"
(Пример НЕправильно оформоленного вопроса)
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37450766
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Boneshock, неужели сложно адекватно оформить конкретный рабочий SQL-запрос с определёнными пожеланиями? Воду в ступе толочь можете попросить свою бабушку, а здесь лучше по существу проблемы излагать.
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37450838
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёклмн, да на пальцах уже объяснил, что тут непонятного то?
Таблица 1:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE [dbo].[Table1](
	[Id] [int] IDENTITY( 1 , 1 ) NOT NULL,
	[Name] [nvarchar]( 200 ) NULL,
	[Description] [nvarchar]( 200 ) NULL,
	[Date] [datetime] NOT NULL)
GO
Таблица 2:
Код: plaintext
1.
2.
3.
4.
CREATE TABLE [dbo].[Table2](
	[Id] [int] IDENTITY( 1 , 1 ) NOT NULL,
	[StatusId] [int] NOT NULL,
	[StatusName] [nvarchar]( 200 ) NOT NULL)
GO
Запрос к базе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @SYSDATE datetime;
SET @SYSDATE=SYSDATETIME()
SELECT t1.*,
LogicalStatus=
CASE
WHEN t1.Date>@SYSDATE THEN  1 
WHEN t1.Date=@SYSDATE THEN  2 
ELSE  3 
END
FROM [Table1] t1

Задача: впихнуть в результирующий набор поле StatusName из [Table2] по значению LogicalStatus(т.е. когда Id=LogicalStatus)

МСУ, причем тут бабушки со ступой, я объяснил задачу человеческим языком, он вам уже непонятен чтоли?
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37450920
Boneshock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да:
Cat2Какие таблицы, сколько их, что скрывается под

Код: plaintext
1.
2.
3.
CASE
--тут набор условий
ELSE 0

тайна сия непонятна простым смертным.


Да какая разница что там, зачем вам эта лишняя информация? Таблиц две, это ясно из всех моих сообщений.
...
Рейтинг: 0 / 0
Нестандартная сортировка в linq2entities
    #37454492
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Boneshock,

Что-то у меня отпало желание Вам помогать
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Нестандартная сортировка в linq2entities
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]