我的应用程序位于 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
}
}
我的问题是,当我删除If-else条件时,相同的 Max()方法查询工作正常,但是当我添加If-else语句时,我得到以下错误。
错误:
至少有一个对象必须实现IComparable。
我尝试了什么:
将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
}
}
答案 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
}
}