1

私が取り組んでいるプロジェクトのために、いくつかの動的クエリを作成する必要があります。プログラムが Count メソッドと First メソッドでかなりの時間を費やしていることがわかったので、.Single に変更し始めましたが、そのようなメソッドがないことがわかりました。

以下のコードは、最初に作成しようとしたものです (ほとんどは Where メソッドからコピーされたものです) が、機能していません。ヘルプ?

 public static object Single(this IQueryable source, string predicate, params object[] values)
    {
        if (source == null) throw new ArgumentNullException("source");
        if (predicate == null) throw new ArgumentNullException("predicate");
        LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values);
        return source.Provider.CreateQuery(
            Expression.Call(
                typeof(Queryable), "Single",
                new Type[] { source.ElementType },
                source.Expression, Expression.Quote(lambda)));
    }
4

3 に答える 3

1

IMHO、クエリを実行するときにSingleorを使用するだけです。SingleOrDefault

// build your dynamic query
var query = NorthwindConext.Products.Categories
                                    .Where("CategoryID = @0", 2);
// now you can simply get the single item by
var category = query.SingleOrDefault();

したがって、動的リンクに「単一」演算子が必要だとは思いません。特に、クエリ列挙によって返されるIEnumerableorIQueryableには 1 つの項目のみが含まれている必要があるためです。

于 2010-03-28T00:36:06.223 に答える
1

Single(SingleOrDefault) と First(FirstOrDefault) の違いがわかりませんか?さらに、EF は最初のものを実装していないため、代わりに First(FirstOrDefault) を使用する必要があります。また、 single の独自の実装を作成することでパフォーマンスの向上が得られるのはなぜですか。これは、コメントによって where のほぼコピーであり、最初とほぼ同じなので、使用しないでください。クエリの存在を確認してください。それらを生成して分析しますか?

于 2010-03-28T03:45:24.990 に答える
0

Queryable.Singleはあなたが探しているものだと思います。

于 2010-03-28T01:10:19.353 に答える