c#lambda查询查找匹配的子元素

时间:2014-03-20 21:50:53

标签: c# mongodb lambda mongodb-.net-driver

var query = Query<MongoData>.EQ(e => e.name, someString);
var entity = collection.FindOneAs<MongoData>(query);

这将返回MongoData collection对象,其中属性name与我发送的字符串(someString)匹配。

我想为此添加另一个查询,以获取与namefiles.author匹配的实体

collectionListfilesList内的collection

目前,我正在艰难地完成这项工作,只是在找到匹配项之前循环entity.files,但这很痛苦。

因此,如果一个MongoData列表包含一个名称为X的对象和一个包含files作者的Y列表,我想要返回此一个

1 个答案:

答案 0 :(得分:2)

您可以这样做,并一次查询多个属性:

var query = Query.And(
    Query<MongoData>.EQ(e => e.name, someString),
    Query<MongoData>.ElemMatch(
        e => e.files,
        q => q.EQ(f => f.author, someAuthorName)
    )
);

后一个子查询使用ElemMatch<TValue>查询函数,该函数需要一个返回可枚举子对象的表达式,以及一个对每个子对象执行另一个查询的函数。