LINQ:System.Int32是一个不可为空的值类型

Miz*_*iaQ 5 .net c# linq linq-to-sql

错误:无法将null值分配给类型为System.Int32且具有非可空值类型的成员.程序在这里崩溃:

Nullable<Int32> maxTagFrequency = (from t in tagSummary select t.tagCount).Max();
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我声明变量可以为空,int?maxTagFrequency也不起作用......

整个LINQ查询:

private void BindTagCloud()
{

 int pro_id = Convert.ToInt32(proj_id);

    var tagSummary = from af in db.AgileFactors
               join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
               join s in db.Stories on psf.StoryID equals s.StoryID 
               join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
               join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
               join pro in db.Projects on it.ProjectID equals pro.ProjectID
               where pro.ProjectID == pro_id &&
                     pro.ProjectID == it.ProjectID &&
                     it.ProjectIterationID == pim.ProjectIterationID &&
                     pim.ProjectIterationMemberID == s.ProjectIterationMemberID &&
                     s.StoryID == psf.StoryID &&
                     psf.AgileFactorID == af.AgileFactorID
                     group af by af.Name into tagGroup

                     select new
                     {

                        Tag = tagGroup.Key,
                        tagCount = tagGroup.Count()

                     };

    Nullable<Int32> maxTagFrequency = (from t in tagSummary select t.tagCount).Max();

var tagCloud = from af in db.AgileFactors
                   join psf in db.ProjectStoryFactors on af.AgileFactorID equals psf.AgileFactorID
                   join s in db.Stories on psf.StoryID equals s.StoryID
                   join pim in db.ProjectIterationMembers on s.ProjectIterationMemberID equals pim.ProjectIterationMemberID
                   join it in db.Iterations on pim.ProjectIterationID equals it.ProjectIterationID
                   join pro in db.Projects on it.ProjectID equals pro.ProjectID
                   where pro.ProjectID == pro_id &&
                         pro.ProjectID == it.ProjectID &&
                         it.ProjectIterationID == pim.ProjectIterationID &&
                         pim.ProjectIterationMemberID == s.ProjectIterationMemberID &&
                         s.StoryID == psf.StoryID &&
                         psf.AgileFactorID == af.AgileFactorID
                   group af by af.Name into tagGroup
                   select new
                   {

                       Tag = tagGroup.Key,
                       weight = (double)tagGroup.Count() / maxTagFrequency * 100
                   };

  ListView1.DataSource = tagCloud; 
  ListView1.DataBind();

}
Run Code Online (Sandbox Code Playgroud)

小智 10

试试这个:

int? maxTagFrequency = (from t in tagSummary select (int?)t.tagCount).Max();
Run Code Online (Sandbox Code Playgroud)

当你将强制转换放在linq查询中时,它允许整个结果在必要时为null.

我搜索了"空序列上的linq max"并且以下链接是相关的:Max或Default?

特别是在该页面上是本文的链接 - 这提供了有关其工作原理的更详细说明:http://www.interact-sw.co.uk/iangblog/2007/09/10/linq-aggregates