我覺得這樣做一定很簡單,但無法完成 - 任何幫助將不勝感激。我對LINQ和MongoDB比較陌生。使用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實例(如一個文件,與子文檔嵌入)。我需要做的是使用ParentId和ChildId檢索存儲在ParentObject文檔中的一個ChildObject子文檔。我幾乎沒有我想要什麼下面的方法/方法調用,但我只能基於索引(0,1等)返回一個IList或一個特定ChildObject:
// 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;
}
很多感謝提前任何幫助/指針。
-Mike
只需兩步:** 1。**通過parentId加載父級。 ** 2。**從父級獲取子級ID:* parent.ChildCollection.Single(x => x.Id == childId); * – 2011-03-02 23:46:13
這樣做,在服務器端執行它會更好,但因爲它不被支持,這會 - 謝謝。 – Mikalee 2011-03-03 15:50:12