Мне нужно достать данные со всех приборов сгруппировав их по узлу, к которому они принадлежат.
Не могу определить связь узлов с точками.
Как-то неуклюже получается: достаю список объектов (узлов) и список всех точек.
Node[] nodes = server.Nodes.GetList();
MeasurePoint[] points = server.MeasurePoints.GetList();
потом тупые циклы
foreach (var no in nodes)
{
foreach (var p in points)
{
if (NodeId == p.NodeId)
{
// нашел !
// работаю…
job(no.Id, p.NodeId);
}
}
}
А метод GetListByNode не подойдет ли? Вроде, то что надо.
Я с асинхронными методами не работал.
Подойдет, но это устаревший метод, который в будущем будет удален. Поэтому мы не рекомендуем их использовать.
Посоветуйте справочные материалы для освоения асинхронных методов.
Может, пример с комментариями есть?
Того что я нашел - онлайн руководство и примеры на github.com/… не достаточно
Отличная статья. Ликбез. Изучаю, спасибо.
Однако, нет ли examples для LersFramework на тему асинхронные методы чтения базы данных ?
Например, про MeassurePoint.Data.GetConsumptionAsync?
Нет, к сожалению таких примеров нет. В LersFramework точно такие же асинхронные функции, что и в приведенной статье компании Microsoft.
Например в этой утилите используются асинхронные методы.
https://github.com/lers-uchet/ImportTemperatureMeteoInfo
Более быстрая группировка точек учета по объектам:
Core.Node[] nodeList = await Connection.Server.Nodes.GetListAsync();
Dictionary<int, Core.Node> nodes = nodeList.ToDictionary(x => x.Id);
var measurePointList = await Connection.Server.MeasurePoints.GetListAsync();
var groups = measurePointList.GroupBy(x => x.NodeId);
foreach (var g in groups);
{
Core.Node node = nodes[g.Key];
Core.MeasurePoint[] measurePoints = g.ToArray();
Job(node, measurePoints);
}
Отлично, благо вам
Однако, вот проще
select * from MeasurePoint group by MeasurePoint_NodeID
Мы крайне не рекомендуем использовать прямые запросы к базе. При изменении архитектуры таблицы ваш запрос может не работать.