vb.net синтаксис для предложения order by в linq to sql, в котором есть select new с

#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