0

我的应用程序在用C#编码的Asp.Net中,我正在使用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
           }
    }

我的问题是当我删除 If-else 条件时,相同的Max()方法查询可以完美运行,但是当我添加 If-else 语句时,出现以下错误。

错误:

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

我尝试了什么:

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

将 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
      }
}
4

1 回答 1

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
       }
}
于 2013-09-18T10:51:12.387 回答