Группировка LINQ по, получение последних результатов

#c# #sql #linq #group-by

#c# #sql #linq #группировка по

Вопрос:

Я довольно новичок в LINQ, так что для некоторых из вас это может быть проще простого, но я уже довольно давно рву на себе волосы 🙂

Сценарий: У меня есть коробка, содержащая 3 аппаратных модуля, которые имеют разные порты. Используя последовательную связь, я извлекаю данные из модулей в таблицу SQL с именем CurrentData_Tables, поэтому каждый раз, когда создается единица измерения, моя программа будет записывать запись в таблицу, указывающую, насколько велика сумма. Позвольте мне попробовать и визуализировать это.

 BoxID, ModuleID, PortNumber, Value, Time
1,     0A,       1,          {Value},     {Date}
  

Время практически одинаково для показаний для этого конкретного модуля, поэтому я предположил, что могу сгруппировать данные, которые являются постоянными, а затем просто получить последние.
Это то, с чем я столкнулся до сих пор :

 SQLdbDataContext sqlDB = new SQLdbDataContext();
BindingSource bs = new BindingSource();
var Latest = from q in sqlDB.CurrentData_Tabels
             group q by new
             {
                 q.BoxID,
                 q.ModuleID,
                 q.PortNumber,
                 q.Time
             }
             into groupOrder
             select new
             {
                 BoxID = groupOrder.Key.BoxID,
                 ModuleID = groupOrder.Key.ModuleID,
                 Portnumber = groupOrder.Key.PortNumber,
                 Time = groupOrder.Key.Time
             };
  

И это совершенно нормально, я получаю все результаты, которые я хочу… И более того, мне не нужно знать, что чтение в модуле 0A, порт 1, было засчитано до 2 перед последней записью 3..
Это понятно? , Если нет, пожалуйста, позвольте мне попытаться объяснить это еще раз 🙂

Выполнение a > для получения наибольшей суммы не сработало бы, поскольку у меня также есть статусы, которые срабатывают при значениях bool, 1 означает, что на компьютере присутствует тревога, а 0 означает, что все в порядке!

Комментарии:

1. Что считается «последним»? Если мы предположим, что данные в базе данных могут быть возвращены в любом порядке, как мы должны знать, какое значение использовать?

2. Те, у которых последняя отметка даты.

3. Какая метка даты? Поле времени? Поскольку вы уже группируетесь по этому … не совсем понятно, что происходит. Если бы вы могли привести несколько примеров данных с большим количеством строк и указать, каким вы хотите видеть результат, это действительно помогло бы.

Ответ №1:

Я думаю, вам нужно удалить поле Time из выражения group и использовать Max в поле Select new.