【问题标题】:Why are these two LINQ queries different? When they seem to be the same为什么这两个 LINQ 查询不同?当它们看起来一样时
【发布时间】:2016-11-25 16:04:55
【问题描述】:

我想知道为什么这两个 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;

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

【问题讨论】:

  • 该错误告诉您,您正在尝试在应该返回 IEnumerable&lt;int?&gt; 的方法中返回 int?
  • return 更改为 yield return :)

标签: c# linq


【解决方案1】:

从有效的查询中可以看出,查询的结果是int?。当你把它变成一个函数时,你的函数的返回类型是IEnumerable&lt;int?&gt;

你的功能应该是

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

【讨论】:

    【解决方案2】:

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

    第二个是在尝试返回的方法上返回int?IEnumerable&lt;int?&gt;。如果要返回可枚举的结果,则需要从查询中删除 FirstOrDefault。从方法名称来看,即复数Costs,这就是你想要的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多