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

本文关键字:查询 结果 格式化 表达式 可以使 Lambda 是否 | 更新日期: 2023-09-27 18:10:20

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

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

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

你应该可以直接调用

Update如注释所述,Select不接受Expression参数。除非userDisplay需要是一个表达式,否则它可以被更新为一个委托:

Func<User,string>> userDisplay = u => u.Firstname + " " + u.LastName + " - " + u.CompanyName;
var formatedResults = results.Select(userDisplay);

Select允许你转换任何你正在迭代的东西。

你可以做的一些例子:

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