2016-11-25 76 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) 
{ 
    ... 
} 
相关问题