
IQueryable<Product> query = db.Products;

foreach (string keyword in keywords)
{
string temp = keyword;
query = query.Where(p => p.Description.Contains(temp));
}
與


{
query = query.Where(p => p.Description.Contains(keyword));
}
有什麼不同嗎?
運作之後,會發現第二種寫法,多次疊加得到的結果完全是相同的,而第一種寫法運作的結果正常,why?
有幸在msn群裡得到老趙的提點,原因如下:
IQueryable查詢時,實際上是建構一個Expression Tree(表達式樹),如果使用foreach疊代變量時,表達式樹實際上得到的隻是疊代變量的一個引用,最終運作時将隻有最後一次的值,而利用一個臨時變量中轉一下後,對表達式而言,就是多個變量,會有不同的值
作者:菩提樹下的楊過