LINQ to EF容易疏忽的几个小问题

在对一个以前的一个小项目(基于.Net 3.5 SP1)进行调优时,发现其中在使用LINQ to EF存在的几个小问题。这些问题都直接影响了最终生成的SQL语句以及程序的性能。

1. 联表查询时尽量不要使用导航属性,而是应该将所有涉及到的关联对象都使用linq join on起来,详见这篇

2.对于byte,short等实现了IComparable的类型,在比较大小时应该尽量使用接口方法CompareTo(T other),否则生成的SQL中会使用cast进行类型转换,这样有可能导致索引失效。

比如

byte state = 5;
//这里的State字段在数据库中是tinyint类型
var item = from item in db.Items where item.State>=state select item;
//生成的SQL:... where cast([item].[State] as int)>=(cast @linq_p_paramter0 as int)

应该改成:
var item = from item in db.Items where item.State.CompareTo(state)>=0 select item;
生成的SQL: ...where [item].[State] >=@linq_p_paramter0

你可能感兴趣的:(C#)