私はオブジェクトを持っている場合、私はブランドそれを呼び出します、そしてこのオブジェクトはモデルと呼ばれるオブジェクトのリストを持っているいくつかの他のオブジェクトのリストを持っていることグループそれらを呼び出すことができます。MongoDBのC#のドライバの連続SelectMany
モデルのリストのみを取得する方法はありますか?MongoDb c#driverを使用してください。
SelectManyを複数回使用してみましたが、成功しませんでした。複数ある場合SelectMany私は常に空のリストを取得します。
コードは自明です。 最後に、何が私を混乱させるのかを説明するコメントです。
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はあなたのコードでOKと思われる余分な選択(なし
OP出力(追加選択()と)
の作業出力)を試してみてください。データはDBに保存されましたか? SelectMany(g => g.Brands).ToList()。SelectMany(b => b.Models).ToList(); var models = collection.AsQueryable();を試してください。 – Mate
@MateデータはDBに保存されます。あなたのコードは動作しますが、私はそのように使用したくありません。その場合、2番目のSelectManyはC#仮想マシン上でデータベースエンジンではなく、もっと多くのトラフィックを使用するので、 – topolm
私は理解して、あなたのC#ドライバのバージョンをチェックし、** MongoQueryable.SelectMany ** – Mate