, 나는 브랜드를 호출합니다 그들 그룹 다른 개체의 목록이를 호출 할 수 있으며이 객체 모델라는 개체의 목록이 있습니다.MongoDB를의 C#을 드라이버 연속 SelectMany
모델 목록의 목록은 MongoDb C# 드라이버를 사용하여 얻을 수있는 방법이 있습니까?
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 코드에서 확인 보인다없이
OP 출력 (추가 선택()로) 출력 작업 시도 . 데이터가 DB에 저장 되었습니까? 다음과 같이 var models = collection.AsQueryable(). SelectMany (g => g.Brands) .ToList(). SelectMany (b => b.Models) .ToList(); – Mate
@Mate 데이터는 DB에 저장됩니다. 귀하의 코드는 작동하지만, 나는 그런 식으로 사용하고 싶지 않습니다. 이 경우 두 번째 SelectMany는 C# 가상 머신에서 데이터베이스 엔진이 아닌 작업을 수행하고 더 많은 트래픽을 사용하기 때문에 – topolm
괜찮습니다. C# 드라이버 버전을 확인하고 ** MongoQueryable.SelectMany **를 읽어보십시오. – Mate