2009-05-19 6 views
1

나는 LINQ에 문제가있어 누군가가 나에게 이유를 설명 할 수 있기를 바랬다.Linq의 질문에 의해 그룹

 List<Spec> specs = GetSpecs(userObject, seasonID, partnershipID); 

     var query = from s in specs 
        where (DateTime)s.FinalApprovedDate != null 
        && !((DateTime)s.FinalApprovedDate).Equals(DateTime.Parse("1/1/1900 12:00:00 AM")) 
        group s by s.ForCompanyID into g 
        select new 
        { 
         Vendor = g.Key, 
         Avg = g.Average(s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
        }; 

내가이 쿼리에서 검색하고자하는 날짜가 null이 아니거나 어디 ForCompanyID BYT 나타내는 만든 날짜 및 각 회사의 최종 승인 날짜 사이의 일의 평균 차이가 :이 코드가 '1/1/1900'. 내 문제는이 쿼리에서이 데이터를 가져 오는 방법을 알 수 없다는 것입니다. 내가 읽은 바로는 이것이 올바른 구문이라고 믿지만 "이름의 '는 현재의 컨텍스트에 새 이름 아래에 존재하지 않는다. 나는 또한 이것을 g로 시도했으나 그렇지 않다. 하나의 값이 어떤 생각

+0

당신은 DateTime.MinValue 대신 DateTime.Parse ("1900 12 : 00 비교 할 수 있습니다 : 00 AM ") 사용 된 LINQ"flavor "에 따라 – Lucas

+0

... 및 (DateTime) s.FinalApprovedDate는 null이 아니며 DateTime은 null이 아닌 값 유형입니다 – Lucas

+0

1/1/1900은 DateTime.MinValue가 아닙니다. 아마도 t와 연관되어 있습니다. 데이터베이스 소프트웨어에서 최소 DateTime을 사용할 수 있습니다. – mquander

답변

7

에 끝에서 두 번째 라인을 변경해보십시오 :.?

Avg = g.Average(s => s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
+2

첫 번째에서 두 번째 문장을 올바르게 사용하고 있습니다. :) – Randolpho

+0

은 아마도 Subtract()를 사용하기 위해 s.FinalApprovedDate를 DateTime으로 캐스팅해야 할 것입니다. – Lucas

+0

올바른 방향으로 나를 안내해 주셔서 감사합니다. - (날짜 시간) s.Created_Date) .Days 새로운 { 공급 업체 = g.Key, 평균 = g.Average (S => ((날짜 시간) s.FinalApprovedDate를 선택 : 여기 나를 위해 일을 가지고 무엇을) }; – bechbd