#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.