using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using MongoDB.Bson;
|
using MongoDB.Driver;
|
|
namespace CSHARP_3227
|
{
|
class Program
|
{
|
static void Main()
|
{
|
var client = new MongoClient();
|
var db = client.GetDatabase("CSHARP3227");
|
var collection = db.GetCollection<OuterContainer>("test");
|
collection.DeleteMany(FilterDefinition<OuterContainer>.Empty);
|
|
var document = new OuterContainer(
|
new[] { new Dummy("outerDummy1"), new Dummy("outerDummy2")},
|
new InnerContainer(new[] {
|
new Dummy("innerDummy1"),
|
new Dummy("innerDummy2")
|
}));
|
collection.InsertOne(document);
|
|
var filter = Builders<OuterContainer>.Filter.Empty;
|
var projection = Builders<OuterContainer>.Projection.Expression(x => new DummyContainerWithDummyNames
|
{
|
ContainerId = x.Id,
|
InnerDummyNames = x.Inner.Dummies.Select(d => d.Name),
|
OuterDummyNames = x.Dummies.Select(d => d.Name)
|
});
|
var dummyNamesByUsingFindProject = collection.Find(filter).Project(projection).ToList();
|
Console.WriteLine("From Find().Project():");
|
dummyNamesByUsingFindProject.ForEach(Console.WriteLine);
|
|
var dummyNamesUsingAsQueryable = collection.AsQueryable()
|
.Select(x => new DummyContainerWithDummyNames
|
{
|
ContainerId = x.Id,
|
InnerDummyNames = x.Inner.Dummies.Select(d => d.Name),
|
OuterDummyNames = x.Dummies.Select(d => d.Name)
|
})
|
.ToList();
|
Console.WriteLine("From AsQueryable<>.Select():");
|
dummyNamesUsingAsQueryable.ForEach(Console.WriteLine);
|
}
|
}
|
|
public class OuterContainer
|
{
|
public OuterContainer(IList<Dummy> dummies, InnerContainer container)
|
{
|
Id = ObjectId.GenerateNewId().ToString();
|
Inner = container;
|
Dummies = dummies;
|
}
|
|
public string Id { get; private set; }
|
public InnerContainer Inner { get; private set; }
|
public IList<Dummy> Dummies { get; private set; }
|
}
|
|
public class InnerContainer
|
{
|
public InnerContainer(IList<Dummy> dummies)
|
{
|
Dummies = dummies;
|
}
|
|
public IList<Dummy> Dummies { get; private set; }
|
}
|
|
public class Dummy
|
{
|
public Dummy(string name)
|
{
|
Name = name;
|
}
|
|
public string Name { get; private set; }
|
}
|
|
public class DummyContainerWithDummyNames
|
{
|
public string ContainerId { get; set; }
|
public IEnumerable<string> InnerDummyNames { get; set; }
|
public IEnumerable<string> OuterDummyNames { get; set; }
|
|
public override string ToString() {
|
return $"{ContainerId}: InnerDummies [{string.Join(", ", InnerDummyNames)}], OuterDummies: [{string.Join(", ", OuterDummyNames)}]";
|
}
|
}
|
}
|