Как ограничить количество записей в неуниверсальном IQueryable - PullRequest
2 голосов
/ 18 апреля 2011

Когда у меня есть IQueryable<T> (универсальный), я могу использовать метод Take для возврата только N записей из набора результатов, возвращенного запросом.

Когда я использую простойуниверсальный метод IQueryable, Take недоступен.Есть ли другой способ достичь того же результата, что и метод Take?

ОБНОВЛЕНИЕ: , как указал Ричард, другой вопрос решает эту проблему.В моем случае необходимый код был еще проще, чем код, предложенный Джоном Скитом в другом вопросе.Это мой окончательный код:

dynamic tempQuery = originalQuery;
finalQuery = Queryable.Take(tempQuery, numRecords);

1 Ответ

1 голос
/ 11 мая 2012

Используйте этот метод расширения:

public static IQueryable Take(this IQueryable source, int count)
{
    MethodCallExpression mce = Expression.Call(
        typeof(Queryable),
        "Take",
        new Type[] { source.ElementType },
        source.Expression,
        Expression.Constant(count)
    );
    return source.Provider.CreateQuery(mce);
}

Вы можете добиться аналогичного эффекта с помощью различных методов расширения, определенных в Queryable, таких как Skip и других, при условии, что вы сопоставляете сигнатуры методов и предоставляете правильно сформированные деревья выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...