@@ -9,6 +9,78 @@ namespace SolrNet.Linq
99{
1010 public static class SolrLinqExtensions
1111 {
12+ public static async Task < long > LongCountAsync < TSource > ( this IQueryable < TSource > query )
13+ {
14+ return await query . CountAsync ( ) ;
15+ }
16+
17+ public static async Task < long > LongCountAsync < TSource > ( this IQueryable < TSource > query , Expression < Func < TSource , bool > > predicate )
18+ {
19+ return await query . LongCountAsync ( ) ;
20+ }
21+
22+ public static async Task < int > CountAsync < TSource > ( this IQueryable < TSource > query )
23+ {
24+ if ( query . Provider is SolrQueryProvider < TSource > provider )
25+ {
26+ MethodCallExpression mce = Expression . Call (
27+ null ,
28+ GetMethod < TSource > ( nameof ( Queryable . Count ) , 1 ) ,
29+ query . Expression ) ;
30+
31+ var result = await provider . ExecuteAsync < int > ( mce ) ;
32+
33+ return result ;
34+ }
35+
36+ return query . Count ( ) ;
37+ }
38+
39+ public static async Task < int > CountAsync < TSource > ( this IQueryable < TSource > query , Expression < Func < TSource , bool > > predicate )
40+ {
41+ if ( query . Provider is SolrQueryProvider < TSource > provider )
42+ {
43+ var result = await provider . ExecuteAsync < int > ( Expression . Call (
44+ null ,
45+ GetMethod < TSource > ( nameof ( Queryable . Any ) , 2 ) , query . Expression , predicate ) ) ;
46+
47+ return result ;
48+ }
49+
50+ return query . Count ( predicate ) ;
51+ }
52+
53+ public static async Task < bool > AnyAsync < TSource > ( this IQueryable < TSource > query )
54+ {
55+ if ( query . Provider is SolrQueryProvider < TSource > provider )
56+ {
57+ MethodCallExpression mce = Expression . Call (
58+ null ,
59+ GetMethod < TSource > ( nameof ( Queryable . Any ) , 1 ) ,
60+ query . Expression ) ;
61+
62+ bool result = await provider . ExecuteAsync < bool > ( mce ) ;
63+
64+ return result ;
65+ }
66+
67+ return query . Any ( ) ;
68+ }
69+
70+ public static async Task < bool > AnyAsync < TSource > ( this IQueryable < TSource > query , Expression < Func < TSource , bool > > predicate )
71+ {
72+ if ( query . Provider is SolrQueryProvider < TSource > provider )
73+ {
74+ bool result = await provider . ExecuteAsync < bool > ( Expression . Call (
75+ null ,
76+ GetMethod < TSource > ( nameof ( Queryable . Any ) , 2 ) , query . Expression , predicate ) ) ;
77+
78+ return result ;
79+ }
80+
81+ return query . Any ( predicate ) ;
82+ }
83+
1284 public static async Task < TSource > FirstAsync < TSource > ( this IQueryable < TSource > query )
1385 {
1486 if ( query . Provider is SolrQueryProvider < TSource > provider )
0 commit comments