Выбор внедренного объекта с помощью LINQ (из MongoDB) - PullRequest
0 голосов
/ 03 марта 2011

Я чувствую, что это должно быть легко сделать, но я не могу это сделать - любая помощь будет принята с благодарностью.Я относительно новичок в LINQ и MongoDB.

У меня есть следующие две сущности:

class ParentObject
{
    GUID ParentId {get;set;}
    IList<ChildObject> ChildObjects {get;set;}
    ...other properties

    ParentObject()
    {
        childObjects = new List<ChildObject>();
    }
}

class ChildObject
{
    GUID ChildId {get;set;}
    ...other properties
}

, что я сохраняю в экземпляре MongoDB (как один документ с вложенными вложенными документами),Что мне нужно сделать, это получить только один из вложенных документов ChildObject , хранящихся в документе ParentObject, используя ParentId и ChildId.У меня есть следующий вызов метода / метода, который почти выполняет то, что я хочу, но я могу только вернуть IList или один конкретный ChildObject на основе индекса (o, 1 и т. Д.):

// I know this won't work    

var parentId = (Some GUID);
var childId = (Some GUID);

var result = 
    SingleWithSelect<ParentObject, ChildObject>
    (
        x => x.Id == parentId && x.ChildObjects.ChildId == ChildId, 
        y => y.ChildObject  
    );


public TResult SingleWithSelect<T, TResult>(
    System.Linq.Expressions.Expression<Func<T, bool>> whereExpression,
    System.Linq.Expressions.Expression<Func<T, TResult>> selectExpression)
    where T : class, new()
        {
            TResult retval = default(TResult);
            using (var db = Mongo.Create(ConnectionString()))
            {
                retval = db.GetCollection<T>().AsQueryable()
                            .Where(whereExpression)
                            .Select(selectExpression)
                            .SingleOrDefault();
            }
            return retval;

        }

Многиезаранее спасибо за любую помощь / указатели.

-Майк

Ответы [ 2 ]

1 голос
/ 03 марта 2011

В настоящее время это не поддерживается в самом Mongodb.При совпадении возвращается весь документ, а не только соответствующий поддокумент.Я не уверен, если норма обеспечивает поддержку этого и фильтры на стороне водителя.Открытая позиция JIRA для этого запроса функции на mongodb: http://jira.mongodb.org/browse/SERVER-828

0 голосов
/ 03 августа 2011

Используйте карту / уменьшить для извлечения встроенного документа.

...