0

我是新手,这可能很简单,但我有以下方法可以正常工作,使用 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;
}

但我也想使用参数向它添加一个“选择”(用于投影),可能看起来像这样(这显然不起作用):

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 如此不熟悉时,很难在网上找到解决方案。

谢谢你。

4

1 回答 1

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;
}
于 2011-01-13T18:22:16.297 回答