我想知道为什么这两个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;
为什么这两个查询不同,我如何让第一个查询正常工作?
答案 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)