为什么这两个LINQ查询不同?当他们似乎是相同的

时间:2016-11-25 16:04:56

标签: c# linq

我想知道为什么这两个LINQ查询不同,或者为什么一个工作而另一个不工作?显然,编译器说他们是不同的,但我似乎无法找出原因?

我希望第一个查询能够正常运行,但无论我做什么都无法工作。

以下LINQ查询给出了错误,

  

无法隐式转换类型' int?'至   ' 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;

为什么这两个查询不同,我如何让第一个查询正常工作?

2 个答案:

答案 0 :(得分:3)

正如您可以看到的那样,您的查询结果是int?。当您将其转换为函数时,函数的返回类型为IEnumerable<int?>

你的功能应该是

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number)
{
  ...
}

答案 1 :(得分:2)

Linq查询返回一个可空的int,即int?,它适用于第二个的原因是因为它将值赋给int?

第二个是在尝试返回的方法上返回int?IEnumerable<int?>。如果要返回可枚举的结果,则需要从查询中删除FirstOrDefault。通过方法名称判断,即复数Costs,这就是你想要的。

但是,如果您只想要一个结果,请将方法签名更改为:

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