Linq 使用Startswith 出现空引用的问题
一、问题
我使用的是Entity Fromwork CodeFirst来操作数据库,昨天在使用startswith查询数据的时候发现一个问题,就是经常一直报空引用的错误,查了很久才找到原因,这里做一个备注,也希望能帮助遇到同样问题的人。
二、描述
为了方便描述我写了一个简单控制台程序,代码如下:
static void Main(string[] args) { try { // QuoteDbContext db = new QuoteDbContext(); var query = GetProductList().Where(x => x.Country.StartsWith("ff")); Console.WriteLine(query.Count()); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); } private static IEnumerable<Product> GetProductList() { QuoteDbContext db = new QuoteDbContext(); return db.Products; }
执行结果
三、解决方法
static void Main(string[] args) { try { QuoteDbContext db = new QuoteDbContext(); var query = db.Products.Where(x => x.Country.StartsWith("ff")); Console.WriteLine(query.Count()); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); }
输出结果
四、原因
通过上面的对比我们发现第一个例子中使用了GetProductList()方法并返回了一个IEnumerable<T>类型的数据,
而第二个例子没有。第一个例子报错是因为使用了List<T>或者IEnumerable<T>,这意味着,系统会默认使用
Linq to Objects,而我们实际使用的是Linq to sql,就会报错,所以我们在使用Linq to SQL 或者 Entity Framework的时候就不要使用第一个例子的方法啦 !