如何在raven db中查询或检索存储在文档中的对象的值有疑问。
class User
{
public String Id { get; set; }
public AccountType AccountType { get; set; }Servicetax
public String MainAccountMobileNo { get; set; }
public UserStatus Status { get; set; }
public String EmailId { get; set; }
public String DisplayName { get; set; }
public Object User { get; set; }
}
这里我将三种不同类型的类存储到对象User中。 说客户,零售商和交易者。
Customer
{
public String Name{ get; set; }
public String Address { get; set; }
public String MobileNo { get; set; }
public String EmailId { get; set; }
}
零售商
{
public String Name{ get; set; }
public String Address { get; set; }
public String MobileNo { get; set; }
public String EmailId { get; set; }
}
交易
{
public String Name{ get; set; }
public String Address { get; set; }
public String MobileNo { get; set; }
public String EmailId { get; set; }
}
现在可以根据客户的班级详细信息检索结果吗? 现在我想根据客户类中的地址检索所有客户,那我该怎么做呢?如何在查询中对对象用户进行类型转换以键入customer。 感谢。
文档中的用户对象可以在上图中存储任何类型的对象,如帐户信息交易者。那么我如何从不能确定和改变的对象类型进行查询。
var Result = sess.Query<UserAccountInfo>().Where(x => x.AccountType == usertype && ((AccountInfoCustomer)x.User).Customerstatus == CustomerStatus.Pending);
这是已经尝试过的查询,这是被捕获的异常 {“URL: \ “/索引/动态/ UserAccountInfos查询= ACCOUNTTYPE%253ADistributor%2520AND%2520User).Customerstatus%253APending&安培;开始= 0&安培;的pageSize = 128&安培;聚集=无\?” \ r \ n \ r \ nSystem.ArgumentException: 字段')_Customerstatus'未编入索引,无法查询字段 未编入索引的\ r \ n at Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes()
答案 0 :(得分:1)
这里的问题是乌鸦数据库的构建。我将旧版本更改为更新版本的查询后使用旧版本
var Result = sess.Query<UserAccountInfo>().Where(x => x.AccountType == usertype && ((AccountInfoCustomer)x.User).Customerstatus == CustomerStatus.Pending);
工作正常。
答案 1 :(得分:0)
你的班级不是很干。请考虑一下:
public abstract class Person
{
public string Name{ get; set; }
public string Address { get; set; }
public string MobileNumber { get; set; }
public string EmailAddress { get; set; }
}
public class Customer : Person {}
public class Retailer : Person {}
public class Trader : Person {}
然后,在您的User类中替换
public Object User { get; set; }
有了这个:
public Person Person { get; set; }
这样,您可以存储3种派生类型中的任何一种的实例。我不会调用属性User
,因为包含的类被称为User
而User.User
可能会让任何必须理解您的代码的人感到困惑。