lambda抛出异常(IQueryable的where方法里通过lambda表达式判断参数是否为null为什么报异常)

本文目录
IQueryable的where方法里通过lambda表达式判断参数是否为null为什么报异常
IQueryable《T》 在执行时候是将 Where 语句是 Queryable.Where() 参数转换为 SQL 语句后在数据库引擎执行的。schoolIds 变不成 SQL 语句所以抛出不支持异常。
ToList 之后调用的 Where 语句是 Enumerable.Where(),这个是在程序内执行的,所以能调用 schoolIds 这个对象。
建议的写法是:
if (schoolIds == null) return GetSchoolAttributeValues(declarationId).ToList();
return GetSchoolAttributeValues(declarationId).ToList().Where(z =》 schoolIds.Contains(z));
可以避免在 schoolIds 为空时候缺调用永远为 true 的 Where 语句,产生额外的消耗;
更好的写法是,如果预期 schoolIds 不为 null 时,如果它的数量超过某个值(比如 10)条时,使用 var set = new HashSet(schoolIds); 创建一个 set 再来进行 Contains 比较。性能会更好。
lambda表达式 类型转换
方法应该不止一种,简单的就是在z的model里设置下就好了
private string _shuzhi;
public int shuzhi
{
get { return Convert.ToInt32(_shuzhi); }
set { _shuzhi = value; }
}
复杂一点的话,可以从数据库读取z-Model那里操作,加个特性,重新映射数据库表对应的model字段
public int shuzhi { get; set; }
建议你用上面那种简单的方法,因为数据库里的字符串不一定能全部转换为int类型,处理不好容易抛异常。而用上面那种方法可以有很多种方式避免异常,比如
int.TryParse("1",out shuzhi)

更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30



