2011-01-13 3 views
1

Я реализовал службу WCF oData и могу успешно запросить службу oData из LINQPad. В моем сервисе oData я сортирую резидентную коллекцию памяти в логическом бизнес-заказе и подтвердил с помощью необработанного запроса браузера html ожидаемые упорядоченные данные отправляются по сети.По умолчанию «ID» sort в результатах LINQPad

Однако кажется, что LINQPad налагает свой собственный заказ по умолчанию на результаты, основанные на ключе «ID» отгруженных объектов.

Ожидаемое поведение в LINQPad? Я пропустил какое-либо свойство настройки, которое может отключить сортировку по умолчанию по умолчанию?

Edit: Как Лассе указано я должен был включить запрос, здесь ...

MyClass.Take (50) 

И в службе WCF здесь является основным код коллекции ...

var list = new System.Collections.Generic.List<MyClass>(); 

.. // collection population 

return list.AsQueryable(); 

* Обновление *

Локальное поведение сортировки относится к команде LINQPad ClassName.Dump (nn).

Отображение как ClassName, так и ClassName.ToList() приводит к заказу, отправленному из моей службы oData. Это все еще небольшая проблема для меня, так как я планировал отправить LINQPad полупользователю для тестирования пользователей, чтобы они могли запросить промежуточные вычисления в приложении для финансового моделирования. Команда Dump() - это первый запрос по умолчанию, предложенный LINQPad.

+0

Можете ли вы показать код, который вы запускаете в LINQPad? Кроме того, какой тип коллекции вы возвращаете? –

+0

@ Lasse Я уточнил вопрос с дополнительной информацией, которую вы запросили. – camelCase

ответ

1

Я думаю, что порядок по умолчанию основан на том, что они физически вставлены в базу данных. в этом случае я гарантирую, что ваше реальное приложение ВСЕГДА применяет логический вид к данным (или в этом случае ваш запрос linqpad).

Я знаю это из опыта работы, так как у меня был запрос linq, который работал нормально до тех пор, пока не были вставлены некоторые внешние данные. эти внешние данные, хотя и были вставлены линейным образом, действительно имели ссылки на даты, охватывающие многие годы. таким образом, когда я сделал последовательные прогоны linq, разделы отсутствовали. сортировка по дате исправила проблему. (Это было несколько лет назад, я уже научился вслед ствие думать о сортировки по умолчанию заказа) :)

только мой Таппенс

+0

Нет базы данных, где бывало в памяти, имеющейся в моем коде, и, как упоминалось выше, когда я попал в службу oData с помощью Internet Explorer, источник страницы подтверждает ожидаемый порядок данных на уровне проводов http. – camelCase

1

Я думаю, что вы забыли о том, что, как SQL, если явно не указано иное, сохранение порядка редко применяется в LINQ (по большей части в LINQ для объектов).

Для решения этой проблемы, вы должны всегда указать порядок, особенно если вам необходимо выполнить такие операции, как Take (или top n в SQL). Это гарантирует результат каждый раз.

В противном случае они являются неопределенными.

+0

@casperOne: Интересная перспектива.Мой эксперимент с LINQ to Objects, и до сих пор я обнаружил, что запросы linq отражают физический порядок резидентных коллекций памяти. Я сосредотачиваюсь в высокопроизводительных вычислительных областях и присоединяю OrderBy() ко всем запросам, поскольку общий коэффициент комфорта не чувствует себя хорошо, как программисты на SQL, которые придерживаются «DISTINCT» для каждого запроса, потому что они не понимают их схему БД. – camelCase

+0

casperOne - вы и camelCase связаны :-) –

+0

@jim - Нет, мы не знаем. Я не вижу связи? – casperOne

Смежные вопросы