RavenDB: как писать запросы на внуков?

Учитывая приведенный ниже код C#, я пытаюсь найти все континенты с провинциями, города которых включают в себя:

  1. город с именем и адресом, соответственно установленными на "Aloma" и "123", и
  2. другой город с именем и адресом, соответственно, установленными в "Гемане" и "435".

public class Continent
{
    public string Name { get; set; }
    public List<Country> Countries{ get; set; }
}

public class Countries
{
    public string Name { get; set; }
    public List<Province> Provinces{ get; set; }
}

public class Province
{
    public string Name { get; set; }
    public List<Province> Cities { get; set; }
}

public class City
{
    public string Name { get; set; }
    public string Address   { get; set; }
}

Я попытался использовать запрос ниже, но, похоже, не работает. Не могли бы вы мне помочь?

Expression<Func<Province, bool>> matchCities = rec =>
      (rec.Cities.Count(fi => fi.Name == "Aloma" && fi.Address== "123") > 0)
        && (rec.Cities.Count(fj => fj.Name == "Hemane" && fj.Address== "435") > 0);

Func<Province, bool> funcMatchCities= matchCities.Compile();

var results3 = session.Query<Continent>()
                      .Where(top => top.Countries.Any(ta => ta.Province.Any(
                                  rec => funcMatchCities(rec))))
                      .OfType<Continent>()
                      .ToList();

1 ответ

Вы можете запросить это так:

var results3 = session.Query<Continent>()
                      .Where(top => top.Countries.Any(ta => ta.Province.Any(
                                 rec =>
      (rec.Fields.Any(fi => fi.Name == "Aloma" && fi.Address== "123") )
        && (rec.Fields.Any(fj => fj.Name == "Hemane" && fj.Address== "435") )))
                      .OfType<Continent>()
                      .ToList();

Обратите внимание, что вы не можете Compile выражение при отправке их поставщику linq.

Другие вопросы по тегам