2010-04-26 52 views
1

大家好,我想做一個非常簡單的動態查詢,它會動態選擇一列,即列的選擇將取決於另一個查詢。所以,我會選擇col X如果條件1和Y如果條件2。使用LINQ動態選擇列?

所以我嘗試使用query.Select(colname)使用擴展方法也嘗試使用Func<>但我不知道如何去做這件事。我已閱讀關於LINQ的動態擴展和反射,但反映了GetValue函數不會爲我的數據庫列返回值。請幫助我,我只是試圖在運行時動態選擇列,並且沒有真正的條件。

回答

5

我認爲最簡單的事情就是動態地建立你的查詢。我們假設所有潛在的列都具有相同的類型 - 字符串。請注意,您可以通過在您選擇的任何列上調用ToString()來強制執行此操作。這很重要,因爲選定的對象都需要相同的類型。然後,只需使用查詢條件構建查詢並選擇適當的列選擇以使用擴展方法標記到查詢上。

var query = db.Widgets.Where(w => w.Price > 10M); 
IEnumerable<string> display = null; 
if (likesName) 
{ 
    display = query.Select(w => w.Name); 
} 
else if (likesDescription) 
{ 
    display = query.Select(w => w.Description); 
} 
else 
{ 
    display = query.Select(w => w.Name + " (" + w.Description + ")"); 
} 

foreach (var item in display) 
{ 
    ... 
} 

我希望這個做作的例子能幫助你走上正確的軌道。

+0

感謝它幫助.. – Vishal 2010-04-26 22:05:19