我是新的,这可能非常简单,但我有以下方法,使用LINQ for MongoDB可以正常工作:
public T Single<T>(System.Linq.Expressions.Expression<Func<T, bool>> whereExpression) where T : class, new()
{
T retval = default(T);
using (var db = Mongo.Create(_connectionString))
{
retval = db.GetCollection<T>().AsQueryable()
.Where(whereExpression).SingleOrDefault();
}
return retval;
}
但我想添加一个&#34; Select&#34;对于它(用于投影)也使用参数,这可能看起来像这样(显然不起作用):
public T SingleWithSelect<T>(System.Linq.Expressions.Expression<Func<T, bool>> whereExpression, System.Linq.Expressions.Expression<Func<T, bool>> selectExpression) where T : class, new()
{
T retval = default(T);
using (var db = Mongo.Create(_connectionString))
{
retval = db.GetCollection<T>().AsQueryable()
.Where(whereExpression)
.Select(selectExpression)
.SingleOrDefault();
}
return retval;
}
希望它能够返回类似于以下内容的东西:
var results = db.GetCollection<Entity>("Entities").AsQueryable()
.Where(i => i.Id == someId)
.Select(y => new { y.SomeEntity }).SingleOrDefault();
基本上我只需要知道如何将SELECT参数传递给返回函数 - 当不熟悉LINQ时,很难在线找到解决方案。
谢谢。
答案 0 :(得分:2)
您需要另一种通用类型来表示Select
调用的结果。
public TResult SingleWithSelect<T, TResult>(
Expression<Func<T, bool>> whereExpression,
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;
}