我一直在努力在我的linq表达式中使用最大函数。我想从去年的多个SQL表中选择各种属性("最大"一年)。红色弯腰告诉我我的int?不包含最大和枚举的定义。max(我想要的函数)需要接收器类型的iEnumerable<int>。我完全是所有这些东西的新手,当我搜索网络时,我无法清楚地说明我需要做的解决问题。我认为这是一个SQL表,它将像普通SQL查询一样穿过行。
我的代码,我尝试了许多变体:
var otherPrograms = (from hm in db.HabitatManagement
join svy in db.Survey on hm.SurveyID equals svy.SurveyID
join iu in db.InventoryUsers on hm.UserID equals iu.UserID
join pt in db.ProgramType on hm.ProgramTypeID equals pt.ProgramTypeID
where pt.Program != "State Agency Public Land Programs"
&& pt.Program != "State Agency Private Land Programs"
&& svy.ReportingYear.Max()
select new
{
iu.StateID,
hm.ProgramTypeID,
pt.Program,
svy.ReportingYear
})
.Distinct()
.Select(x => new { x.StateID, x.Program, x.ProgramTypeID, x.ReportingYear, DisplayText = x.ReportingYear.ToString() + ", " + x.StateID.ToString() + ", " + x.Program.ToString() })
.OrderBy(x => x.StateID);
我还尝试了一个嵌套查询来实现同一件事(不确定我什至正确地做到了):
&& svy.ReportingYear = (from svy in db.Survey
select svy.ReportingYear.Max())
当我查看报告年属性的定义时,它看起来像:
public Nullable<int> ReportingYear {get; set;}
我很确定问题是它不是一个ienumerable&lt;int>那么,如何在不弄乱我的SQL表的情况下将其制成?
这应该在Survey
集合/表中给出最大ReportingYear
值:
int max = (from svy in db.Survey
where svy.ReportingYear.HasValue
select svy.ReportingYear.Value).Max();
Nullable
,根据定义,表示可以分配的值类型。意思是该属性拥有一个值,而不是Collection
。
从您的代码中,您似乎想获得ReportingYear
中存储的一组年的最大值,因此您可能应该将ReportingYear
定义为某种集合,例如List<int>
。
public List<int> ReportingYear { get; set; }
,如果不可用很重要,请创建无效整数列表,如下:
public List<int?> NullableReportingYear { get; set; }
在其中添加以下内容之前,然后使用 maxyear 而不是您的svy.reportingyear.max()
let maxYear = (from svy in db.Survey
where svy.MaxYear != null
select (int)svy.MaxYear).Max()
所以...
&& svy.ReportingYear.Max()
需要更改为
&& svy.ReportingYear != null && svy.ReportingYear == maxYear
或
&& (svy.ReportingYear == null || svy.ReportingYear == maxYear)