gpt4 book ai didi

c# - EntityFramework - 选择具有自定义属性投影的实体

转载 作者:太空宇宙 更新时间:2023-11-03 13:18:38 24 4
gpt4 key购买 nike

考虑以下实体:

public class Model
{
public int Id { get; set; }
public decimal Value { get; set; }
}

我想在分配给模型实例之前对任何decimal 值进行舍入。我可以这样做:

dbContext.Models
.Select(model => new
{
Id = model.Id,
Value = Math.Round(model.Value, 10)
}
.ToList()
.Select(anonymous =>
new Model
{
Id = anonymous.Id
Value = anonymous.Value
});

它工作正常,但我有一个包含超过 100 列的实体。是否可以构建自动遍历属性并在 decimal 属性上调用 Math.Round 并创建具有新值的实体模型实例的投影?

我不想实现 - 仅提供是否可以使用表达式树执行此操作的线索,或者应该寻找其他解决方案。

最佳答案

是的,您当然可以使用表达式树来做到这一点。我要做的是编写一个继承自 ExpressionVisitor 的类, 覆盖它的 VisitMember()方法并在那里检查 decimal 属性。当您检测到 decimal 属性时,返回包装在 Math.Round() 中的该属性。

最终结果应该正是您想要的:像 model => new { Id = model.Id, Value = model.Value } 这样的 lambda 表达式将被转换为 model = > 新的 { Id = model.Id, Value = Math.Round(model.Value, 10) }。然后,您可以从名为 SelectRounded() 的扩展方法中调用它。

关于c# - EntityFramework - 选择具有自定义属性投影的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com