0

私は新しく、これはおそらく非常に簡単ですが、MongoDB用のLINQを使用して、正常に機能する次の方法があります。

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パラメーターをreturn関数に渡す方法を知る必要があります。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 に答える