#vb.net #linq-to-sql
#vb.net #linq-to-sql
Вопрос:
У меня есть оператор LINQ to sql, который объединяет 2 таблицы. Я хотел бы добавить предложение order by в один из столбцов. Однако предложение order by, похоже, вообще не вступает в силу.
Не могли бы вы, пожалуйста, предложить правильный синтаксис в VB.net для достижения order by в следующем:
Dim query = From dtIt In dbsomecontext.mytable
Join dtIl In dbsomecontext.anothertable On dtIt.ItemID Equals dtIl.ItemID
Where dtIl.IsAvailable = True
Order By dtIt.manufacturer
Select New With {
.Alpha = UCase((dtIt.manufacturer).Substring(0, 1))
}
Dim dtManufacturer As DataTable = csLINQOperations.LINQToDataTable(query)
Return dtManufacturer
Ответ №1:
Вы поставили точку останова в строке, где нужно отключить dtManufacturer?
Я создал несколько примеров классов для повторного представления ваших объектов данных так, как вы это определили.
Dim linqQuery = From dtIT In myTables _
Join dtIL In otherTables On dtIT.ItemID Equals dtIL.ItemID _
Where dtIL.IsAvaliable = True _
Order By dtIT.Manufacturer Ascending _
Select New With {.Alpha = UCase((dtIT.Manufacturer).Substring(0, 1))}
Теперь, когда у меня есть точка останова в строке после этого запроса LINQ, я могу проверить объект linqQuery с помощью «linqQuery.Перечислите» и посмотрите порядок данных. Это фактически упорядочивает выходные данные упорядоченным образом, на основе названия производителя.
Почему вы думаете, что ваш код не упорядочивает данные? Используя точки останова и Watch, проверьте ваш объект «query» (используя «запрос.»Список» в быстром просмотре) и посмотрите, правильно ли упорядочены результаты.
Ответ №2:
Да, я полагал, что результаты не были упорядочены «быстрым просмотром» с помощью dtManufacturer в строке: Dim dtManufacturer Как DataTable = csLINQOperations.LINQToDataTable(запрос)
Теперь я изменил запрос на следующий, и он работает: Dim query = Из dtIt в dbinkAndToner.InkAndToners присоединяются к dtIl в dbinkAndToner.ItemsLists в dtIt.ItemId равен dtIl.ItemId Где dtIl.isAvailable = True Выберите New с помощью { .Alpha = ((dtIt.Производитель).Подстрока(0, 1)) } Distinct
query = From dtIt In query
Order By dtIt.Alpha
Dim dtManufacturer As DataTable = csLINQOperations.LINQToDataTable(query)
Return dtManufacturer