直接上问题,完成web中的一个简单的查找功能:
//定义一个查找模型:
public class SearchModel{
//注意:数据类型为int? 原因:查找模型的这一字段可为空,所以设为int?
int? statue;
//还有很多其他属性,忽略
}
//数据库模型
public class Book{
//注意:数据类型为int而不是 原因:数据库模型的这一字段不为空,所以设为int
int status;
//还有很多其他属性,忽略
}
//在此忽略那些多层结构,直接在控制层完成
public class Controller{
public ActionResult search(SearchModel searchModel){
//下句语句会抛出异常
Repository.Entities<Entity>.Where(e => e.status == searchModel.status.GetValueOrDefault());
return View();
}
}
异常原因:
由于查找模型和数据库模型的类型不一致,所以在Linq中使用了int?.GetValueOrDefault()方法对数据类型进行了转换,所以抛出一下异常:
LINQ to Entities 不识别方法“Int32 GetValueOrDefault()。
同理,其他类型转换也会抛出该异常。
解决方法:
最简单的方法:类型转换不要再Linq中进行就好了,例如:
var status = searchModel.status.GetValueOrDefault();
Repository.Entities<Entity>.Where(e => e.status == status);
搞掂!