RavenDB: как писать запросы на внуков?
Учитывая приведенный ниже код C#, я пытаюсь найти все континенты с провинциями, города которых включают в себя:
- город с именем и адресом, соответственно установленными на "Aloma" и "123", и
- другой город с именем и адресом, соответственно, установленными в "Гемане" и "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.