Ich habe Objekte, aus denen Messungen in einer einzigen Tabelle gespeichert werden. Ich möchte herausfinden, wie lange ein Objekt innerhalb eines bestimmten Zeitraums in einem bestimmten Zustand war.LINQ Wählen Sie den nächsten Datensatz mit jedem übereinstimmenden Ergebnis
Also zusätzlich zu den Datensatz mit dem gewünschten Zustand muss ich es mit der nächsten Messung aus dem gleichen Objekt paaren, um die Zeit zwischen ihnen zu berechnen.
kam ich mit diesem Monster-up:
// Get the the object entry from Database
MeasuredObject object1;
try
{
object1 = (MeasuredObject)(from getObject in db.MeasuredObject where wantedObject.Id.Equals(getObject.Id) select getObject).Single();
}
catch (System.ArgumentNullException e)
{
throw new System.ArgumentException("Object does not exist", "wantedObject", e);
}
// Get every measurement which matches the state in the time period and the next measurement from it
var pairs = (from m in object1.Measurements
join nextM in object1.Measurements
on (from next in object1.Measurements where (m.Id < next.Id) select next.Id).Min() equals nextM.Id
where 'm is in time period and has required state'
select new { meas = m, next = nextM });
Ich würde sagen, dass dies nicht sehr effizient scheint vor allem, wenn ich 3,5 Compact Edition bin mit.
Gibt es eine Möglichkeit, zur nächsten Messung über m zu navigieren oder kann ich irgendwie orderby oder group verwenden, um die nächste ID auszuwählen? Oder machen Sie die Join-Klausel sogar einfacher?
Nur aus Gründen der Übersichtlichkeit ist dies nicht LINQ zu Objekten, noch LINQ zu Entities, aber LINQ zu SQL? Und "Measurements" ist eine Art "IQueryable" und die gesamte LINQ-Abfrage wird als SQL-Abfrage in einer SqlServer-Datenbank ausgeführt. –
Ich bin immer noch ein wenig verwirrt über die verschiedenen Anwendungen um LINQ ... Das Objekt1 wurde aus der Datenbank entnommen. Ich werde den Aufruf von object1 in der Frage hinzufügen. Die Messungen sind jedoch eine SQL-Tabelle, die einen Fremdschlüssel für das Objekt 1 in der Datenbank hat. Also ja ich denke, das ist LINQ zu SQL – Silvyrfir
Ja, ich weiß, es ist verwirrend, aber das ist die Realität. Und verschiedene Quellen erfordern unterschiedliche Lösungen. Das Wichtigste hier ist der ** Typ ** der Eigenschaft "object1.Measurements" - bitte geben Sie es an, z. 'IEnumerable'. 'IQueryeble ' usw. –