2011-09-30 50 views
3

比方說,我有這個疑問我傳遞到存儲庫:是否可以使用Lambda表達式來格式化查詢的結果?

var results = userRepository.Get(u => u.Username == "JDoe" && u.Password == "123456"); 

現在,讓我們說我創建格式化結果以某種方式表達:

Expression<Func<User,string>> userDisplay = u => u.Firstname + " " + u.LastName + " - " + u.CompanyName 

所以我可能會寫我自己的擴展,但這樣的事情:

var formatedResults = results.Format(userDisplay); 

更新:

什麼更復雜的解決方案來推算結果到另一個對象:

public class SearchResult 
{ 
    object EntityId {get; set;} 
    object Displaytext {get; set;} 

} 

因此,使用相同的想法,使用特定的顯示錶達,什麼是項目成果轉化的信息搜索結果對象的好方法?

回答

4

你應該能夠只是調用

更新如選擇不接受表達式參數評論中指出。除非userDisplay需要是它可能只是被更新爲代表的表達式:

Func<User,string>> userDisplay = u => u.Firstname + " " + u.LastName + " - " + u.CompanyName; 

var formatedResults = results.Select(userDisplay); 

更新

選擇讓你變身無論你是迭代。

的你可以做什麼的一些例子:

var formattedResults = results.Select(x=> new SearchResult { EntityId = x.Id, DisplayText = userDisplay(x){); 
//anonymous type 
var formattedResults = results.Select(x=> new { EntityId = x.Id, DisplayText = x.ToString()}); 
+0

有趣的....我從來沒有想過用這樣的選擇方法。沒想到它會起作用。我必須嘗試一下! – DDiVita

+0

請參閱我更新的問題,瞭解如何在仍使用選擇答案的同時投影結果。 – DDiVita

+0

@Ken,這是行不通的,因爲'Select()'不能以'Expression '作爲參數。該表達式必須首先是「編譯()」。 –