Si j'ai des objets, permet de les appeler groupe qui a liste de quelques autres objets que je l'appellerai Marque, et cet objet a une liste d'objets appelés Modèle.MongoDB C# pilote SelectMany consécutif
Y at-il un moyen d'obtenir uniquement la liste des modèles en utilisant le pilote MongoDb C#.
J'ai essayé d'utiliser SelectMany plusieurs fois mais sans succès. Si je mets plus d'un SelectMany je reçois toujours une liste vide.
Le code doit être explicite. A la fin est un commentaire qui explique ce qui me trouble.
class Group
{
[BsonId(IdGenerator = typeof(GuidGenerator))]
public Guid ID { get; set; }
public string Name { get; set; }
public List<Brand> Brands { get; set; }
}
class Brand
{
public string Name { get; set; }
public List<Model> Models { get; set; }
}
class Model
{
public string Name { get; set; }
public int Produced { get; set; }
}
class Program
{
static void Main(string[] args)
{
MongoClient client = new MongoClient("mongodb://127.0.0.1:32768");
var db = client.GetDatabase("test");
var collection = db.GetCollection<Group>("groups");
var fca = new Group { Name = "FCA" };
var alfaRomeo = new Brand { Name = "Alfra Romeo" };
var jeep = new Brand { Name = "Jeep" };
var ferrari = new Brand { Name = "Ferrari"};
var laFerrari = new Model { Name = "LaFerrari", Produced = 4 };
var wrangler = new Model { Name = "Wrangler", Produced = 3 };
var compass = new Model { Name = "Compass", Produced = 8 };
var giulietta = new Model { Name = "Giulietta", Produced = 7 };
var giulia = new Model { Name = "Giulia", Produced = 8 };
var _4c = new Model { Name = "4C", Produced = 6 };
fca.Brands = new List<Brand> { ferrari, alfaRomeo, jeep };
ferrari.Models = new List<Model> { laFerrari };
jeep.Models = new List<Model> { wrangler, compass };
alfaRomeo.Models = new List<Model> { giulietta, giulia, _4c };
collection.InsertOne(fca);
Console.WriteLine("press enter to continue");
Console.ReadLine();
var models = collection.AsQueryable().SelectMany(g => g.Brands).SelectMany(b => b.Models).ToList();
Console.WriteLine(models.Count); //returns 0 I expected 6
Console.ReadLine();
}
}
SelectMany semble ok dans votre code . les données ont-elles été sauvegardées dans DB? Essayez var models = collection.AsQueryable(). SelectMany (g => g.Marques) .ToList(). SelectMany (b => b.Models) .ToList(); – Mate
Les données @Mate sont enregistrées dans la base de données. Votre code fonctionne, mais je ne voudrais pas l'utiliser comme ça. Parce que dans ce cas deuxième SelectMany faire le travail sur C# machine virtuelle pas dans le moteur de base de données comme il le devrait et aussi utiliser plus de trafic – topolm
ok je comprends, vérifiez votre version du pilote C# et lisez sur ** MongoQueryable.SelectMany ** – Mate