天天看點

IQueryable與foreach的困惑?

IQueryable與foreach的困惑?

IQueryable<Product> query = db.Products;

IQueryable與foreach的困惑?

foreach (string keyword in keywords)

IQueryable與foreach的困惑?
IQueryable與foreach的困惑?
IQueryable與foreach的困惑?

{

IQueryable與foreach的困惑?

    string temp = keyword;

IQueryable與foreach的困惑?

    query = query.Where(p => p.Description.Contains(temp));

IQueryable與foreach的困惑?

}

與 

IQueryable與foreach的困惑?
IQueryable與foreach的困惑?
IQueryable與foreach的困惑?
IQueryable與foreach的困惑?
IQueryable與foreach的困惑?

{       

IQueryable與foreach的困惑?

    query = query.Where(p => p.Description.Contains(keyword));

IQueryable與foreach的困惑?

 有什麼不同嗎?

運作之後,會發現第二種寫法,多次疊加得到的結果完全是相同的,而第一種寫法運作的結果正常,why?

有幸在msn群裡得到老趙的提點,原因如下:

IQueryable查詢時,實際上是建構一個Expression Tree(表達式樹),如果使用foreach疊代變量時,表達式樹實際上得到的隻是疊代變量的一個引用,最終運作時将隻有最後一次的值,而利用一個臨時變量中轉一下後,對表達式而言,就是多個變量,會有不同的值

作者:菩提樹下的楊過

繼續閱讀