2013-10-10 1 views
1

날짜/시간 및 값 테이블이 있습니다. 값은 날짜/시간에 탱크의 볼륨입니다. 지난 10 일 동안 매 시간마다 탱크가 가득 찼거나 비어있는 정도를 계산하려고합니다.LINQ를 사용하여 시간당 연료 소비량을 계산하십시오.

나는 15 분 간격으로 탱크를 측정하지만 어쩌면 내가 20 분마다 측정 할 것입니다. LINQ를 사용하여 계산하려고합니다.

allDataView.RowFilter = String.Format(CultureInfo.InvariantCulture.DateTimeFormat, 
    "DateOfData < #{0}# AND DateOfData > #{1}#", DateTime.Now, DateTime.Now.AddDays((-1) * daysInterval)); 

allDataView.Sort = "DateOfData DESC"; 

// making the diff between every sample during the last daysInterval days and put it into a list with these differences. 
var result = allDataView.Table.AsEnumerable().Zip(allDataView.Table.AsEnumerable().Skip(1), (row1, row2) => Convert.ToDouble(row1["Value"])-Convert.ToDouble(row2["Value"])); 

그러나이 모든 측정의 차이입니다 : 내가 무슨 짓을

이다. 내가 원했던 것은 그 날 기간 동안의 라운드 시간에 샘플 간의 차이를 계산하는 것입니다. 예를 들어

: 나는 11시에 있었던 최신 값을 (3)과 (0.5) 10시에 있던 마지막 값을 가지고 그것을 3을 삽입 할보다

9:50 0.5 
10:05 1 
10:20 2 
10:35 2.5 
10:50 3 
11:05 5 

-0.5 = 2.5로 목록에 추가하고 해당 기간 동안 계속합니다.

나는 Linq를 사용하여 그것을하고 싶다. 구현 방법에 대한 도움을 주시면 감사하겠습니다.

고마워요.

답변

-1

날짜 시간 값의 그룹화를 처리하는 sp를 만드는 것이 좋습니다. 이것은 귀하의 쿼리가 더 빨리 실행되도록 추가 보너스가 있어야합니다, 그리고 당신은 빨리 linq을 통해 결과를 끌어낼 수 shoukld.

+0

호기심으로이 downvote에 대한 추론하기 위하여? – DrewbieDoo

+0

비즈니스 로직을 DataBase에 구현하면 안됩니다. 또한 BL은 소스 안전성이 있어야합니다. [염려의 분리] (http://en.wikipedia.org/wiki/Separation_of_concerns) – mecek

+0

건배, 그러나 나는 SQL 서버에서 LINQ보다 빠르게 실행될 Linq에서 수행 된 추가 기능에 이어 SQL 서버에서 간단한 그룹 선택을 제안했습니다. 양철통. – DrewbieDoo

0

나는 내가 그것을 만들었다 고 생각 :

var groups = from row in allDataView.Table.AsEnumerable() 
         group row by new { Convert.ToDateTime(row["DateOfData"]).Hour, Convert.ToDateTime(row["DateOfData"]).Date } into g 
         select new 
         { 
          FirstDate = g.First()["DateOfData"], 
          FirstValue = g.First()["Value"], 
          LastDate = g.Last()["DateOfData"], 
          LastValue = g.Last()["Value"] 
         }; 


      var result = groups.Select(grp => Convert.ToDouble(grp.FirstValue) - Convert.ToDouble(grp.LastValue));