您的位置:首页 > 其它

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

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

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

2.对于byte,short等实现了IComparable<T>的类型,在比较大小时应该尽量使用接口方法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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: