Je dispose d'un référentiel central pour les journaux des appareils IoT. Ainsi, lorsque les journaux arrivent, ils sont horodatés. Le problème que je souhaite résoudre est le suivant : au cours d'une période donnée, le même appareil peut envoyer plusieurs journaux concernant son interaction avec un catalyseur spécifique. Je veux considérer cet ensemble de journaux comme un seul événement et non comme 5 journaux disparates. Je veux compter le nombre d'interactions et non le nombre de journaux.
Ensemble de données
public class Data
{
public Guid DeviceId {get; set;}
public DateTime StartTime { get; set; }
public DateTime EndDateTime { get; set; }
public int Id { get; set; }
public int Direction { get; set;}
}
Data d1 = new Data();// imagine it's populated
Data d2 = new Data();// imagine it's populated
Je cherche une requête LINQ qui produirait quelque chose du genre
If ((d1.DeviceId == d2.DeviceId ) && (d1.Id == d2.Id) && (d1.Direction == d2.Direction) && (d1.StartTime - d2.StartTime < 15 minutes ))
Si je sais que le même appareil IoT interagit avec le même identifiant (catalyseur) et que la direction est la même, et que tous ces enregistrements se produisent dans un laps de temps de 15 minutes, on peut supposer qu'ils correspondent au même événement catalyseur.
Je ne contrôle pas la création du journal, donc... non, je ne peux pas mettre à jour les données pour y inclure "quelque chose" qui indiquerait la relation.
Données par demande... rien d'extraordinaire. Je suis sûr que la plupart des gens pensent que j'ai plus de 30 propriétés et que je ne fournis que celle qui est affectée par le calcul, mais il s'agit d'un simple ensemble de possibilités.
class SampleData
{
public List<Data> GetSampleData()
{
Guid device1 = Guid.NewGuid();
List<Data> dataList = new List<Data>();
Data data1 = new Data();
data1.DeviceId = device1;
data1.Id = 555;
data1.Direction = 1;
data1.StartTime = new DateTime(2010, 8, 18, 16, 32, 0);
data1.EndDateTime = new DateTime(2010, 8, 18, 16, 32, 30);
dataList.Add(data1);
//so this data point should be excluded in the final result
Data data2 = new Data();
data1.DeviceId = device1;
data1.Id = 555;
data1.Direction = 1;
data1.StartTime = new DateTime(2010, 8, 18, 16, 32, 32);
data1.EndDateTime = new DateTime(2010, 8, 18, 16, 33, 30);
dataList.Add(data2);
//Should be included because ID is different
Data data3 = new Data();
data1.DeviceId = device1;
data1.Id = 600;
data1.Direction = 1;
data1.StartTime = new DateTime(2010, 8, 18, 16, 32, 2);
data1.EndDateTime = new DateTime(2010, 8, 18, 16, 32, 35);
dataList.Add(data3);
//exclude due to time
Data data4 = new Data();
data1.DeviceId = device1;
data1.Id = 600;
data1.Direction = 1;
data1.StartTime = new DateTime(2010, 8, 18, 16, 32, 37);
data1.EndDateTime = new DateTime(2010, 8, 18, 16, 33, 40);
dataList.Add(data4);
//include because time > 15 minutes
Data data5 = new Data();
data1.DeviceId = device1;
data1.Id = 600;
data1.Direction = 1;
data1.StartTime = new DateTime(2010, 8, 18, 16, 58, 42);
data1.EndDateTime = new DateTime(2010, 8, 18, 16, 58, 50);
dataList.Add(data5);
return dataList;
}