2016-11-25 64 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'改爲'yield return' :) –

回答

2

LINQ查詢返回可空INT即int?,它爲第二個原因是因爲它是分配值到int?

第二個返回int?上的方法試圖返回:IEnumerable<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) 
{ 
    ... 
} 
相關問題