3

关于如何从存储在文档中的对象中查询或检索值存在疑问,如下所示在 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; }
}

现在是否可以根据客户的班级详细信息检索结果?那就是现在我想根据客户类中的地址检索所有客户,那么我该怎么做呢?如何将查询中的对象用户类型转换为客户类型。谢谢。我的文档存储的图像

文档中的用户对象可以存储任何类型的类对象,例如上图中的账户信息交易者。那么我如何从不能确定和变化的对象类型中查询。

var Result = sess.Query<UserAccountInfo>().Where(x => x.AccountType == usertype && ((AccountInfoCustomer)x.User).Customerstatus == CustomerStatus.Pending);

这是已尝试的查询,这是已捕获的异常 {"Url: \"/indexes/dynamic/UserAccountInfos?query=AccountType%253ADistributor%2520AND%2520User).Customerstatus%253APending&start=0&pageSize=128&aggregation=None\" \r\n\r\nSystem.ArgumentException:字段 ')_Customerstatus' 未编入索引,无法在 Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes() 处查询未编入索引的字段\r\n

4

2 回答 2

1

这里的问题是 raven db 的构建。在将查询更改为更新版本后,我使用的是旧版本

var Result = sess.Query<UserAccountInfo>().Where(x => x.AccountType == usertype && ((AccountInfoCustomer)x.User).Customerstatus == CustomerStatus.Pending);

工作正常。

于 2013-02-06T11:02:31.887 回答
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可能会让任何必须理解您的代码的人感到困惑。

于 2013-01-17T14:33:39.917 回答