.Max()方法在if else中使用时给出错误

时间:2013-09-18 10:40:59

标签: asp.net-mvc-3 linq

我的应用程序位于 Asp.Net 中,编码为 C#,而我正在使用 LINQ 进行数据库事务处理。我的要求是获取保存在某个表中的记录的最大值,因为我使用的是 Max()方法。

以下是我的控制器代码:

    [HttpPost]
    public ActionResult Create(Entity_Name Entity_Object)
    {
          if (Entity_Object.Condition == true)
          {
                    My required code
          }
          else
          {
                var get_Max_Number = db.Entity_Name.ToList();
                long Max_Number = 0;

                if (get_Max_Number.Count() > 0)
                {
                    Max_Number = Convert.ToInt64(get_Max_Number.Max());

                }
                    My required code
           }
    }

我的问题是,当我删除I​​f-else条件时,相同的 Max()方法查询工作正常,但是当我添加If-else语句时,我得到以下错误。

错误:

至少有一个对象必须实现IComparable。

我尝试了什么:

  1. 我试图删除If-Else
  2. 我将Max()方法逻辑放在If-else
  3. 之上

    将Max()方法置于If-Else

    之上
    [HttpPost]
    public ActionResult Create(Entity_Name Entity_Object)
    {
          var get_Max_Number = db.Entity_Name.ToList();
          long Max_Number = 0;
    
          if (get_Max_Number.Count() > 0)
          {
                 Max_Number = Convert.ToInt64(get_Max_Number.Max());
          }
          if (Entity_Object.Condition == true)
          {
                 My required code
          }
          else
          {
                 My required code
          }
    }
    

1 个答案:

答案 0 :(得分:1)

Max()需要知道你获得的最大值。如果你的Entity_Name类包含许多属性(字符串,整数等...),那么你需要告诉它在什么基础上获得最大值。

另一件事,你从事物的外观通过Linq连接数据库,但执行你的Count()&检索完数据库表的全部内容后,Max()在内存中运行。随着表的大小增加,这将是非常低效的。 LinqToSql& LinqToEF支持将这些功能推送到数据库级别。我建议您将代码更改为以下内容。

[HttpPost]
public ActionResult Create(Entity_Name Entity_Object)
{
      if (Entity_Object.Condition == true)
      {
          //My required code
      }
      else
      {
            long Max_Number = 0;
            if(db.Entity_Name.Count() > 0)
            {
                Max_Number = Convert.ToInt64(
                                db.Entity_Name.Max(x => x.PropertyToGetMaxOf)
                             );
            }
            //My required code
       }
}