文章出處
文章列表
Entityframeworks很聰明
不錯,非常不錯!ef里的contains比linq to sql里的contains有了明顯的提升,事實上,是在進行SQL語句翻譯上有所提升,在linq to sql里不支持iqueryable的contains集合,它只支持本地集合進行contains,而本地集合的contains會被.net翻譯成sql語句是where in (...),即集合有多個元素,在in里就會被列舉多少次,這個在性能上是非常低下的,不提倡的,而且它還有長度限制,最多本地集合在linq to sql里是2000多個元素。
ef在這點上表示不錯,它為了防止你使用低下的查詢,它杜絕你在linq語句中去ToList()對象,這是不錯的選擇,對于EF中的contains的用法,我們一般是分兩步,第一查詢出要列舉的結果集,但不要ToList(),第二是使用contains語句,當EF把它發到SQL端時,這個語句被翻譯成了exist,我們知道,這種查詢的性能一定是比where in強的,不說SQL本身就說網絡傳輸,它也一定比前者省了不少,呵呵。
Entityframeworks中正確使用Contains語句的Demo
錯誤的
var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID).ToList(); var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();
SQL語句截圖
正確的
var linq = (from data1 in GetUser().Where(i => i.UserID <= 50) select data1.UserID);//IQueryable<int>,一個查詢計劃 var linq2 = GetUser_StudyRecord().Where(i => linq.Contains(i.UserID.Value)).ToList();
SQL語句截圖
怎么樣,看了截圖,不說,你也知道哪個性能好了吧,呵呵!
文章列表
全站熱搜
留言列表