LiteDb Где Query - PullRequest
       12

LiteDb Где Query

0 голосов
/ 18 мая 2018

У меня настроен LiteDb со следующими моделями.

public partial class User
{
    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("email")]
    public string Email { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("user_roles")]
    public List<UserRole> UserRoles { get; set; }

    [JsonProperty("created_at")]
    public DateTimeOffset CreatedAt { get; set; }

    [JsonProperty("updated_at")]
    public DateTimeOffset UpdatedAt { get; set; }

}

public class UserRole
{
    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

Следующее утверждение, использующее шаблон репозитория и использующее Linq для фильтрации записей, работает должным образом.Я получаю правильное количество записей из базы данных.

_repository
    .Query<Models.Offline.User>()
    .ToList()
    .Where(x => x.UserRoles.Any(r => r.Name.Equals("customer")))
    .ToList();

Я пытаюсь запросить те же записи, используя шаблон repository, как показано ниже.

_repository
    .Query<Models.Offline.User>()
    .Where(u => u.UserRoles.Any(role => role.Name.Equals("customer")))
    .ToList();`

Записи не возвращаются с помощью операторапоказано выше.

Что не так с моим приведенным выше утверждением?

1 Ответ

0 голосов
/ 21 мая 2018

Если вы хотите получить доступ к подклассу в массиве, вы можете использовать свойство индекса:

.Where(x => x.UserRoles[0].Name == "customer")

Или вы можете использовать индекс:

_respository.EnsureIndex("User", "idx_customer", "$.UserRoles[*].Name")

И чем искать с помощью

_repository.Find<Models.Offline.User>(Query.EQ("idx_customer", name))

...