Permettez d'avoir ces objets :
public class Obj1
{
public string Id { get; set; }
}
public class Obj2
{
public string Id { get; set; }
public string Obj1Id { get; set; }
}
public class Obj3
{
public string Id { get; set; }
public string Obj2Id { get; set; }
}
J'utilise l'inclusion de cette manière :
var objs3 = session.Query()
.Customize(x => x.Include(o3 => o3.Obj2Id))
.Take(1000)
.ToList();
foreach (var obj3 in objs3)
{
var obj2 = session.Load(obj3.Obj2Id);
//faire quelque chose avec cela
}
Ma question est, y a-t-il possibilité d'ajouter à la requête quelque chose comme .Where(o2 => o2.Obj1Id == "some/Id") ? La requête ne sait rien sur Obj2 du côté client (Linq), mais du côté serveur, elle travaille avec eux, car cela ne fait qu'une seule requête à la base de données.
J'essaie de voir comment fonctionnent les index et les projections, mais je n'ai pas de chance avec certaines constructions. Peut-être que ma vision est déformée par les bases de données relationnelles et qu'il y a d'autres solutions qui nécessitent que mes structures soient redéfinies...
Ma autre solution est d'ajouter Obj1Id à Obj3, mais cela fera des duplicatas (je peux vivre avec cela ;) )
Quelques informations supplémentaires sur les objets :
- Obj1 est unique pour chaque client, donc il y a environ 200 documents
- Obj2 : Obj3 sont des frères et sœurs 1 : 1, chacun avec ses propres propriétés point de vue, environ 100 000 pour chaque client
Question bonus : Y a-t-il quelque chose comme une chaîne de Inclusion ? Inclure Obj1 à l'intérieur de l'inclusion de Obj2 ? (cela je ne vais pas utiliser, c'est juste une question)