日期:2014-05-20  浏览次数:20917 次

linq 查询 序列为空的异常如何处理?
var lst = GetCache("AAA") as AAA[];

var l = lst.Where(s => s.Name== name && s.Address == address).Select(s => new { key = s.Name, value = s.Address,tel=s.Tel}).Distinct().Max(s=>s.tel);

请教各位 

lst.Where(s => s.Name== name && s.Address == address).Select(s => new { key = s.Name, value = s.Address,tel=s.Tel}).Distinct().Max(s=>s.tel);


以上语句报System.InvalidOperationException: 序列不包含任何元素 
该如何处理

------解决方案--------------------
可以用 DefaultIfEmpty 或者FirstOrDefault 为空序列创建默认元素
参考http://www.cnblogs.com/ASPNET2008/archive/2008/12/17/1356841.html


------解决方案--------------------
var lst = GetCache("AAA") as AAA[];

var l = lst.Where(s => s.Name== name && s.Address == address).Select(s => new { key = s.Name, value = s.Address,tel=s.Tel}).Distinct().OrderBy(s=>s.tel);
if(l.Count()>0)
{
var mx=l.First().tel;
}
------解决方案--------------------
因为你期中的步骤可能选出的为空,那么如果在此基础上再去选择就会报错,比 Select没有选出数据,在使用Distinct就可能出错