2016-11-25 1 views
-7

나는 왜이 두 LINQ 쿼리가 다른지, 또는 왜 하나가 작동하지 않는 다른 알고 싶습니다? 분명히 컴파일러는 다르다고 말하지만, 왜 그런지 알 수는 없습니까?왜이 두 LINQ 쿼리가 다른가요? 그들은 같은 것 같을 때

첫 번째 쿼리가 작동하도록하고 싶지만 무엇을해도 상관 없습니다. 작동하지 않습니다.

암시 적 타입 변환 할 수 없습니다 LINQ 쿼리 아래는 나에게의 오류를 제공

, '지능?' 에 'System.Collections.Generic.IEnumerable'

public static IEnumerable<int?> GetTenantFacilityCosts(int? code, DateTime date, int number) 
    { 
     return DataContext.Facility_Cost_TBLs. 
       Where(p => p.Tenant_Code == code && 
          p.Code_Date == number && 
          p.Date_Year == date.Year && 
          p.Date_Month == date.Month). 
          FirstOrDefault().Tenant_Portion; 
    } 

그러나이 쿼리 아래 내가 얻으려고 노력하고 있고 오류가 발생하지 않는 int 값을 가져옵니다.

int? facilityCost = 
     DataContext.Facility_Cost_TBLs. 
     Where(p => p.Tenant_Code == selectedTenant.Tenant_Code && 
        p.Code_Date == 10 && 
        p.Date_Year == date.Year && 
        p.Date_Month == date.Month). 
        FirstOrDefault().Tenant_Portion; 

왜 이러한 두 개의 쿼리가 다르며 처음 올바르게 작동하게 할 수 있습니까?

+5

오류는 당신이'INT를 반환하려는 것을''IEnumerable을 을'반환해야하는 방법에서 당신을 알 수 있습니까? . – germi

+0

'return to'yield returns'로 변경합니다 :) –

답변

2

LINQ 쿼리가 반환 INT 널 (NULL) 즉 int? 그것이 int?에 값을 할당하기 때문에, 그것은 초 동안 작동하는 이유는.

두 번째 것은 IEnumerable<int?>을 반환하려고 시도하는 메서드에서 int?을 반환합니다. 열거 형 결과를 반환하려면 FirstOrDefault을 쿼리에서 제거해야합니다. 메소드 이름 (복수형 Costs)으로 판단하면 원하는 내용입니다.

그러나 당신은 단지 하나 개의 결과에 메소드 서명 변경하려는 경우 :

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number) 
3

작동하는 것으로부터 알 수 있듯이 쿼리의 결과는 int?입니다. 이것을 함수로 변환하면 함수의 반환 유형은 IEnumerable<int?>입니다.

당신 기능이 있어야한다

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number) 
{ 
    ... 
} 
관련 문제