我有一个包含一些计算属性的文档。没有setter的属性,可以在我的类上调用其他方法来返回结果,例如:
public class Order
{
public string CustomerId { get; set; }
public string VehicleId { get; set; }
public DateTime OrderDate { get; set; }
public decimal CommissionPercent { get; set; }
public List<OrdersLines> OrderLines { get; set; }
public decimal Total
{
get { return GetOrderLinesTotal() + SomeDecimal + AnotherDecimal; }
}
public decimal GetOrderLinesTotal()
{
return OrderLines.Sum(x => x.Amount);
}
}
我使用一个简单的索引来搜索客户订单,日期和使用lucene查询的Vehicle文档中的一些属性以及用于创建我的视图模型的Transformer。我查看了脚本索引结果,我不确定它是否适用于这种情况。
public class ViewModel
{
public string OrderId { get; set; }
public string CustomerName { get; set; }
public string VehicleName { get; set; }
public string Total { get; set; }
}
当我查询这些文档时,如何从Total属性中获取计算值?
我已经将GetOrderLinesTotal简化了一些,实际上它是一种复杂的方法,在计算总数时需要考虑很多其他属性。
我只获得在创建或更新文档时序列化的计算值。
答案 0 :(得分:2)
我意识到这更像是一个文档设计问题而不是试图做一些RavenDB不应该做的事情。我简化了我的文档并使用map / reduce来解决问题。
答案 1 :(得分:1)
我认为你的情况类似于我曾经遇到的问题。我在公共 get 属性上使用JsonIgnore
属性,并使用私有支持字段,我使用JsonProperty
属性将其包含在序列化中。你应该能够应用类似的想法:
/// <summary>
/// The <see cref="Team" /> class.
/// </summary>
public class Team
{
/// <summary>
/// The ids of the users in the team.
/// </summary>
[JsonProperty(PropertyName = "UserIds")]
private ICollection<string> userIds;
// ...[snip]...
/// <summary>
/// Gets the ids of the users in the team.
/// </summary>
/// <value>
/// The ids of the users in the team.
/// </value>
[JsonIgnore]
public IEnumerable<string> UserIds
{
get { return this.userIds; }
}
// ...[snip]...
}