微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 SumAsync 计算 Asp.Net 核心中自定义值对象的总和

如何解决如何使用 SumAsync 计算 Asp.Net 核心中自定义值对象的总和

我有一个具有值对象类型属性的模型,如下所示:

public class Course : AggregateRoot,ISpModel
{
    ...
    public Unsignednumber MaximumCapacity { get; private set; }
    ...
}

其中 Unsignednumber一个包含短值的值对象:

public class Unsignednumber : BaseValueObject<Unsignednumber>
{
    public short Value { get; }
    ...
}

我需要做的是对符合特定条件的课程的所有 MaximumCapacities 求和,但是当我尝试在查询末尾添加 SumAsync(x => x.MaximumCapacity) 时,出现语法错误 the syntax error 当我尝试对其值执行相同操作时,我在运行时遇到 linq 错误

"LINQ 表达式 '(int)(EntityShaperExpression: \r\n EntityType: Course\r\n ValueBufferExpression: \r\n (ProjectionBindingExpression: Outer)\r\n IsNullable: False\r\n).MaximumCapacity .Value' 无法翻译。要么以可翻译的形式重写查询,要么通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。请参阅https://go.microsoft.com/fwlink/?linkid=2101038 了解更多信息。”

编辑: 下面是遇到问题的Linq Expression:

var query = _dbContext.Courses.AsQueryable();
query = query.Include(x => BunchOfIncludes(x));
var res = await query.Where(x => BunchOfClauses(x)).SumAsync(x => x.MaximumCapacity.Value);

Edit2:上面提到的类:

public abstract class AggregateRoot : Entity
{
    private readonly List<IDomainEvent> _events;
    protected AggregateRoot() => _events = new List<IDomainEvent>();
    public AggregateRoot(IEnumerable<IDomainEvent> events)
    {
        if (events == null) return;
        foreach (var @event in events)
            ((dynamic)this).On((dynamic)@event);
    }
    protected void AddEvent(IDomainEvent @event) => _events.Add(@event);
    public IEnumerable<IDomainEvent> GetEvents() => _events.AsEnumerable();
    public void ClearEvents() => _events.Clear();
}
public interface ISpModel
{
}
public abstract class BaseValueObject<TValueObject> : IEquatable<TValueObject>
        where TValueObject : BaseValueObject<TValueObject>
{
...
    public static bool operator ==(BaseValueObject<TValueObject> right,BaseValueObject<TValueObject> left)
    {
        if (right is null && left is null)
            return true;
        if (right is null || left is null)
            return false;
        return right.Equals(left);
    }
...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。