Linq使用聚合查询表没有记录报错

作者: Robin 分类: Asp.net 发布时间: 2010-03-21 13:10

Linq 聚合查询 遇到空表 怎么处理,.Max(p => p.IOrder); 没有记录报错,

var query= db.MenuInfo.Where(p => p.PID == PID);
if(query.Any())
{
  double q = query.Max(p => p.IOrder);
  ……
}
else
{
  ……
}

即使你写T-SQL,也得写:

if exists(select * from MenuInfo where pid=@pid)
  select max(pid) from MenuInfo
else
  select ……

总之是要两步才可能得到结果的。

方法1
int? maxValue=null;
var items=from c in context.table1 select c;
try
{
  maxValue=items.Max(p=>p.column_1)
}
catch(InvalidOperationException){}
if(maxValue.HasValue){}
else{}
方法2
int? maxValue = null;
var items=from c in context.table1 select c;
if(items.Count())maxValue=maxValue=items.Max(p=>p.column_1)
if(maxValue.HasValue){}
else{}

发现一个更好的做法

int? col;
var items=from c in context.table1
          select c;
int? maxValue=items.Max(p=>col = p.column_1);

select max(pid) from MenuInfo

当没有记录时,返回的不是空记录,而是字段值为NULL(数据库值)的记录,并不是空记录。
null 转换成int 就会出错。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云