Mam tabeli bazy danych, która wygląda tak:C# Query Wybierz pierwszy od wartości zmieniło
teraz. To jest wskaźnik Historii Statusu dla DetektorID 1541.
Chcę wyświetlić tylko jeden wiersz na mojej stronie internetowej. Aby to zrobić, wykonuję następujące zapytanie.
[Query]
public IQueryable<ScannerStatusHistory> GetScannerStatusHistoryy(int detectorID)
{
return ObjectContext.ScannerStatusHistories.Where(t => t.DetectorID == detectorID).OrderByDescending(d => d.TimeStamp).Take(1); ;
}
Więc co robi, to chwyta najnowszy wiersz (Na podstawie TimeStamp) i pokazuje go.
To da mi wyniki ScannerStatusHistoryID 61
.
Ale, co chciałbym mieć, to rząd po raz ostatni wartość został zmieniony.
Jak widać na ScannerStatusHistoryID 54
, RC3
miał wartość 4
. Następnie na ScannerStatusHistoryID 57
zmieniono z powrotem na 3
.
Od tego czasu wartości się nie zmieniły.
To, co chciałbym mieć, to zapytanie, aby pobrać ScannerStatusHistoryID 57
. Do zmiany wartości ponownie, a następnie chcę ją pobrać pierwszy z tego.
Jak to osiągnąć? Myślałem o zliczaniu wyników w miejscu, w którym pasowało do ostatniego zapytania. Jednak w tym przykładzie zwróci 7 wyników (od pierwszych 4 są takie same jak w ostatnich 3). I tak nie przyniesie to właściwego rezultatu.
Czy chcesz kontrolować wartość wszystkich kolumn 'hwd' i' RC'? lub 'RC3' wystarczy dla ciebie? –
Zasadniczo, co otrzymam teraz jest najnowszy wynik. Jednak nie muszę tego wiedzieć, ale chciałbym wiedzieć od kiedy to się zmieniło. – Mitch
Od 2012 sql sever ma LEAD, LAG, która daje najprostsze rozwiązanie problemu. Czy usind sql jest bezpośrednio opcją? Linq jak w .Net 4.6.1 nie obsługuje funkcji analitycznych sql. – Serg