假设我将此查询传递给存储库:
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;}
}
因此,使用相同的想法来使用特定的显示表达式,将结果投影到SearchResult对象的好方法是什么?
答案 0 :(得分:4)
你应该可以打电话
更新如评论中所述,Select不接受Expression参数。除非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()});