0
Учитывая следующие C# код ниже, я пытаюсь получить все континенты, имеющими провинции, чьи города включают в себя:RavenDB: как писать запросы о внуках?
- город с названием и адресом, соответственно, установленное в «Aloma» и «123» и
- другого город с именем и адресом соответственно установлен на «Hemane» и «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();
Большое спасибо за ваш ответ. Ваш запрос работает, когда он находит провинцию с городами «Алома» и «Гемане». Но он также работает, когда он находит первую провинцию с городом под названием «Алома» и еще одну провинцию с городом под названием «Гемане», в то время как ни одна из этих двух провинций не включает в себя два города. Как я могу предотвратить выполнение запроса во втором случае? –
Итак, как сделать следующую работу: var query = session.Query() .Where (top => top.Countries.Any (ta => ta.Provinces.Any (rec => (rec.Cities.Where) fi => fi.Name == "Aloma" && fi.Address == "123") .Intersect() && rec.Cities.Where (fj => fj.Name == "Hemane" && fj.Address == " 435 "))))) .OfType () .ToList(); –