2014-02-27 2 views
0

에 대한 최신 항목을 선택합니다.Linq에, 나는 다음과 같은 테이블이 각 서비스

db에있는 각 서비스 ID에 대해 ServiceStatusHistory Objects의 목록을 제공하고 가장 최근의 (가장 큰 시간의) 서비스 (해당 서비스에 대한 것) 만 enabled = true로 지정하십시오.

이렇게 복잡한 이유는 각 서비스에 대해 테이블에 여러 항목이 있기 때문입니다. 따라서 ID 4를 가진 서비스는 여기에 100 개의 항목을 가질 수 있습니다. 여러 서비스가있을 것입니다. 여기

내 시도 :

using (var db = new EFDbContext()) 
      { 
       var result = (from x in db.ServiceStatusHistory 
           where x.Service.Enabled == true 
           select x).FirstOrDefault(); 

       list = result.toString(); 
      } 

하지만 내 쿼리가 하나의 객체가 아닌 그 목록을 반환됩니다 실현?

+0

속성이 ServiceStatus 마지막 또는 첫번째 경우 정의 뭐죠? –

+1

나는 시간 desc로 주문해야한다고 생각한다. – Maess

답변

0

이에 변화를 시도 할 수 있습니다 :

(from x in db.ServiceStatusHistory 
            where x.Service.Enabled == true 
            select x).Last(); 
0

는 서비스 ID로 당신은 그룹 수이

(from x in db.ServiceStatusHistory 
            where x.Service.Enabled == true 
            select x).OrderBydescending(x => x.yourfeild).Top(1); 
+0

그 중 하나의 객체 만 반환 할 예정입니까? 그렇지 않아? – Zapnologica

+0

네,하지만 마지막으로 삽입 된 값 –

3

을 시도하고 그룹의 마지막을 선택합니다.

using (var db = new EFDbContext()) 
{ 
    var results = d.ServiceStatusHistory.Where(h => h.Service.Enabled) 
             .OrderByDescending(h => h.time) 
             .GroupBy(h => h.Service.Id) 
             .Select(grp => grp.FirstOrDefault()); 
} 

OrderByDescending

는 당신에게 FirstOrDefault에 대한 적절한 순서를 제공 할 것입니다. GroupBy은 전달 된 요소의 순서를 보존합니다.

결과는 이며, Id 속성에 따라 Service을 반복하지 않습니다. "마지막"에 특정 의미가있는 경우 OrderByDescending을 변경하십시오.

편집 : 열심히 객체를 포함, 당신은 Include extension 방법을 사용하여 다음을 수행 할 수 있습니다

d.ServiceStatusHistory.Include(h => h.Service) 
+0

나는 그것이 효과가 있다고 생각합니다. :) 그러나 와우는 쿼리를 실행하는 데 오랜 시간이 걸립니다. 현재 나는 db가 1 행 밖에없고 8 초가 걸립니다. i5 with ssd – Zapnologica

+0

한 행만 있고 8 초가 걸리면 쿼리 자체에서는 문제가되지 않습니다. –

+0

왜 그렇게 오래 걸릴까요? 분명히 항목이 테이블에 추가 될 때 저하됩니다. – Zapnologica

0
db.ServiceStatusHistory 
    .Where(x => x.Status.Enabled) 
    .GroupBy(x => x.Service) 
    .Select(x => x.OrderByDescending(y => y.time).First()); 
+0

결과에 내 서비스에 액세스하려고 시도하면 서비스가 null입니다. 왜 이럴 수 있니? – Zapnologica

+0

엔티티와 같은 사운드가 원하는대로 설정되지 않을 수 있습니다. 'db.ServiceStatusHistory.First(). Service'가 당신에게 무엇을 주겠습니까? 어때'db.Services.First()'? – stovroz

+0

첫 번째 : 나에게 내게 두 번째는 잘 작동합니다. – Zapnologica

관련 문제