Ouerying объект внутри документа ravendb

Существует сомнение относительно того, как запрашивать или извлекать значение из объекта, хранящегося в документе, следующим образом в 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; }
}

Now is it possible to retrieve results based on the Customer's class detail? That is now i want to retrieve All the Customers based on Address in the customer class, So how will i do it? How to typecast the object user in the query to type customer. Thanks.Image of my document storage

The user object in the document can store any type of class's object like account info трейдер in the above image. So how can i query from the object type that cannot is not definite and changing.

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

This is the query that's been tried and this is the exception that's been caught {"Url: \"/indexes/dynamic/UserAccountInfos?query=AccountType%253ADistributor%2520AND%2520User).Customerstatus%253APending&start=0&pageSize=128&aggregation=None\"\r\n\r\nSystem.ArgumentException: The field ')_Customerstatus' is not indexed, cannot query on fields that are not indexed\r\n at Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes()

3
nl ja de
После того, как вы исправите свои классы, чтобы показать нам, как вы их связываете, также покажите, какой запрос вы попробовали, чтобы мы понимали ваши намерения.
добавлено автор Matt Johnson, источник
Я храню класс клиента в типе объекта, который я упомянул как пользователь внутри пользовательского класса
добавлено автор user1811801, источник
Да, это возможно, но я не вижу класс Customer, указанный в вашем классе пользователя.
добавлено автор Brett Allred, источник

2 ответы

Проблема здесь заключалась в создании ворона db. я использовал старшую сборку после изменения ее в более новую версию запроса

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

работает отлично.

1
добавлено

Ваши классы не очень сухие. Рассмотрим это вместо этого:

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; }

Таким образом, вы можете сохранить экземпляр любого из трех производных типов. Я бы не назвал свойство User , учитывая, что содержащий класс называется User и User.User может запутать любого, кто должен понимать ваши код.

0
добавлено
Спасибо за ответ .. но это не решение, которого я ожидаю, у меня были эти классы в качестве образца, там его не мой настоящий. Буду признателен, если вы действительно решите мою проблему. который запрашивает объект, который хранится в документе.
добавлено автор user1811801, источник
Трудно помочь вам решить вашу проблему, если вы действительно не публикуете код, с которым у вас возникла проблема. Ошибка, которую вы видите, не может быть брошена кодом, который вы опубликовали.
добавлено автор levelnis, источник