我试图制作一个可以在我的应用程序中的任何地方使用的通用方法。
这是我的方法:
public T GetEntry(ObjectId id)
{
IMongoCollection<T> collections = db.GetCollection<T>(database);
var getObj = collections.Find( ).FirstOrDefault(); // something like x => x.id == id
return getObj;
}
Find
采用一个lambda表达式来指定约束,但是我无法设置它,因为在运行时之前不知道这些属性。我该如何设置?
答案 0 :(得分:2)
是否要更改来电者的搜索表达式?在这种情况下,从调用者传递表达式可能最容易。像这样:
public T GetEntry<T>(ObjectId id, Expression<Func<T, bool>> predicate)
{
IMongoCollection<T> collections = db.GetCollection<T>(database);
var getObj = collections.Find(predicate).FirstOrDefault(); // Call passed in predicate
return getObj;
}
然后当您调用该函数时,您可以执行以下操作:
var person = GetEntry<Person>(id, person => person.Id == id);
答案 1 :(得分:1)
您可以使用此解决方案的接口
require_once
或者您可以在运行时动态创建lambda表达式
public Interface IEntity
{
int Id {set ;get}
}
class EntryManagement<T> where T : IEntity
{
public T GetEntry(ObjectId id)
{
IMongoCollection<T> collections = db.GetCollection<T>(database);
var getObj = collections.Find(x => x.Id == id).FirstOrDefault();
return getObj;
}
}