2011-04-14 33 views
4

我目前正在尋找一種方法,可以根據用戶輸入在運行時爲我的Linq to SQL查詢構建lambda表達式。我一直在網上尋找,但找不到任何有用的東西。如果有人能告訴我怎麼做,或者有什麼好的文章,請讓我知道。非常感激!構建動態LINQ到Sql lambda表達式

例子:

比方說,我有這樣的Linq查詢:

var loc = (from l in Entity.Locations 
      select l).Where(a => a.LocationId > 5); 

可以這樣表達a => a.LocationId > 5在運行時建的?取決於用戶是否選擇了LocationId。如果用戶選擇了名稱,那麼它將是a => a.Name == "bla"

我遇到了Scott的一篇文章,但我更喜歡一個解決方案,它允許我創建一個強類型表達式,我可以在編譯時檢測到任何可能的錯誤。

任何信息將不勝感激。

謝謝。

回答

2

您可以創建包含舊錶達式的新LINQ表達式。

var loc = (from l in Entity.Locations select l); 

if (hasLocation) 
    loc = loc.Where(a => a.LocationId > 5); 

if (hasName) 
    loc = loc.Where(a => a.Name == "bla"); 

一旦你使用它的表達式只計算了,像var result = loc.ToList();

+0

涼爽。謝謝。我實際上正在考慮構建表達樹,但不知道如何去做。這會做。謝謝 – developer 2011-04-14 06:40:24