【发布时间】:2020-07-15 09:49:26
【问题描述】:
我正在尝试使用可以根据我从输入中收到的内容逐步更新的选择表达式,如下所示:
// Init expression
Expression<Func<Order, object>> selectExpression = x => new
{
x.Id
};
if(selectInput.Title){
// something like this
selectExpression = selectExpression.Add(x => new
{
x.Title
});
}
if(selectInput.ClientFullName){
// something like this
selectExpression = selectExpression.Add(x => new
{
ClientFullname = x.Client.Fullname
});
}
// Use expression in a LINQ query (for an EF Core query)
var result = await queryable.Select(selectExpression).ToListAsync();
那么我希望得到这样的结果
{
"Id": 568,
"Title": "Order 567",
"ClientFullname": "John Smith"
}
这是可能的吗?我在网上找到的唯一例子是关于 .Where()。我是不是走错方向了?
谢谢!
【问题讨论】:
-
这比看起来要难得多。这些匿名类型是由编译器在编译时生成的:您不能只是在运行时将
ClientFullname字段动态添加到类型上。使用字典会更容易(但仍然有点繁琐) -
你只有一个字典
-
LINQ 的重点是在编译时知道查询的结构。如果不是这种情况,最好使用较旧的工具来查询数据库,这些工具本质上不会静态定义查询结果的模式。您为自己创造的工作比使用 LINQ 节省的工作要多。
标签: c# linq linq-to-sql entity-framework-core