问题描述
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 (将#修改为@)