是否可以使用Lambda表达式格式化查询结果?

时间:2011-09-30 13:30:58

标签: c# lambda entity-framework-4.1

假设我将此查询传递给存储库:

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对象的好方法是什么?

1 个答案:

答案 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()});