Skip to content

Commit f43d316

Browse files
committed
Fix Any and Count (#16)
1 parent 73fb5c3 commit f43d316

File tree

2 files changed

+61
-87
lines changed

2 files changed

+61
-87
lines changed

src/System.Linq.Dynamic.Core/BasicQueryable.cs

+5-31
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
using System.Collections;
22
using System.Collections.Generic;
3-
using System.Diagnostics;
4-
using System.Linq.Dynamic.Core.Extensions;
53
using System.Linq.Dynamic.Core.Validation;
64
using System.Linq.Expressions;
7-
using System.Reflection;
85
using JetBrains.Annotations;
96

107
namespace System.Linq.Dynamic.Core
@@ -99,11 +96,7 @@ public static IQueryable Take([NotNull] this IQueryable source, int count)
9996
Check.NotNull(source, nameof(source));
10097
Check.Condition(count, x => x > 0, nameof(count));
10198

102-
return source.Provider.CreateQuery(
103-
Expression.Call(
104-
typeof(Queryable), "Take",
105-
new[] { source.ElementType },
106-
source.Expression, Expression.Constant(count)));
99+
return Queryable.Take((IQueryable<object>)source, count);
107100
}
108101

109102
public static IQueryable<TSource> Take<TSource>([NotNull] this IQueryable<TSource> source, int count)
@@ -129,11 +122,7 @@ public static IQueryable Skip([NotNull] this IQueryable source, int count)
129122
if (count == 0)
130123
return source;
131124

132-
return source.Provider.CreateQuery(
133-
Expression.Call(
134-
typeof(Queryable), "Skip",
135-
new[] { source.ElementType },
136-
source.Expression, Expression.Constant(count)));
125+
return Queryable.Skip((IQueryable<object>)source, count);
137126
}
138127

139128
public static IQueryable<TSource> Skip<TSource>([NotNull] this IQueryable<TSource> source, int count)
@@ -153,9 +142,7 @@ public static IQueryable Reverse([NotNull] this IQueryable source)
153142
{
154143
Check.NotNull(source, nameof(source));
155144

156-
return source.Provider.CreateQuery(Expression.Call(
157-
typeof(Queryable), "Reverse",
158-
new[] { source.ElementType }, source.Expression));
145+
return Queryable.Reverse((IQueryable<object>)source);
159146
}
160147
#endregion
161148

@@ -169,17 +156,7 @@ public static bool Any([NotNull] this IQueryable source)
169156
{
170157
Check.NotNull(source, nameof(source));
171158

172-
return (bool)source.Provider.Execute(
173-
Expression.Call(
174-
typeof(Queryable), "Any",
175-
new[] { source.ElementType }, source.Expression));
176-
177-
//return (bool) source.Provider.Execute(
178-
// Expression.Call(
179-
// null,
180-
// MethodInfoHelper.GetMethodInfoOf(() => BasicQueryable.Any(default(IQueryable))),
181-
// new Expression[] { source.Expression }
182-
// ));
159+
return Queryable.Any((IQueryable<object>)source);
183160
}
184161

185162
public static bool Any<TSource>([NotNull] this IQueryable<TSource> source)
@@ -198,10 +175,7 @@ public static int Count([NotNull] this IQueryable source)
198175
{
199176
Check.NotNull(source, nameof(source));
200177

201-
return (int)source.Provider.Execute(
202-
Expression.Call(
203-
typeof(Queryable), "Count",
204-
new[] { source.ElementType }, source.Expression));
178+
return Queryable.Count((IQueryable<object>)source);
205179
}
206180

207181
public static int Count<TSource>([NotNull] this IQueryable<TSource> source)

test/System.Linq.Dynamic.Core.Tests/EntitiesTests.cs

+56-56
Original file line numberDiff line numberDiff line change
@@ -80,75 +80,75 @@ void PopulateTestData(int blogCount = 25, int postCount = 10)
8080
#endregion
8181

8282
#region Any
83-
//[Fact]
84-
//public void Entities_Any()
85-
//{
86-
// //Arrange
87-
// PopulateTestData(1, 0);
83+
[Fact]
84+
public void Entities_Any()
85+
{
86+
//Arrange
87+
PopulateTestData(1, 0);
8888

89-
// var expectedQueryable1 = _context.Blogs.Where(b => b.BlogId > 0);
90-
// bool expectedAny1 = expectedQueryable1.Any();
89+
var expectedQueryable1 = _context.Blogs.Where(b => b.BlogId > 0);
90+
bool expectedAny1 = expectedQueryable1.Any();
9191

92-
// var expectedQueryable2 = _context.Blogs.Where(b => b.BlogId > 9999);
93-
// bool expectedAny2 = expectedQueryable2.Any();
92+
var expectedQueryable2 = _context.Blogs.Where(b => b.BlogId > 9999);
93+
bool expectedAny2 = expectedQueryable2.Any();
9494

95-
// //Act
96-
// IQueryable queryable1 = _context.Blogs.Where("BlogId > 0");
97-
// bool any1 = queryable1.Any();
95+
//Act
96+
IQueryable queryable1 = _context.Blogs.Where("BlogId > 0");
97+
bool any1 = queryable1.Any();
9898

99-
// IQueryable queryable2 = _context.Blogs.Where("BlogId > 9999");
100-
// bool any2 = queryable2.Any();
99+
IQueryable queryable2 = _context.Blogs.Where("BlogId > 9999");
100+
bool any2 = queryable2.Any();
101101

102-
// //Assert
103-
// Assert.Equal(expectedAny1, any1);
104-
// Assert.Equal(expectedAny2, any2);
105-
//}
102+
//Assert
103+
Assert.Equal(expectedAny1, any1);
104+
Assert.Equal(expectedAny2, any2);
105+
}
106106
#endregion
107107

108108
#region Paging
109-
//[Fact]
110-
//public void Entities_Page()
111-
//{
112-
// //Arrange
113-
// const int total = 33;
114-
// const int page = 2;
115-
// const int pageSize = 10;
116-
// PopulateTestData(total, 0);
109+
[Fact]
110+
public void Entities_Page()
111+
{
112+
//Arrange
113+
const int total = 33;
114+
const int page = 2;
115+
const int pageSize = 10;
116+
PopulateTestData(total, 0);
117117

118-
// //Act
119-
// IQueryable queryable = _context.Blogs.Select("it");
120-
// bool any = queryable.Any();
121-
// var count = queryable.Count();
122-
// var result = queryable.Page(page, pageSize);
118+
//Act
119+
IQueryable queryable = _context.Blogs.Select("it");
120+
bool any = queryable.Any();
121+
var count = queryable.Count();
122+
var result = queryable.Page(page, pageSize);
123123

124-
// //Assert
125-
// Assert.Equal(true, any);
126-
// Assert.Equal(total, count);
127-
// Assert.Equal(_context.Blogs.Page(page, pageSize).ToArray(), result.ToDynamicArray<Blog>());
128-
//}
124+
//Assert
125+
Assert.Equal(true, any);
126+
Assert.Equal(total, count);
127+
Assert.Equal(_context.Blogs.Page(page, pageSize).ToArray(), result.ToDynamicArray<Blog>());
128+
}
129129

130-
//[Fact]
131-
//public void Entities_PageResult()
132-
//{
133-
// //Arrange
134-
// const int total = 44;
135-
// const int page = 2;
136-
// const int pageSize = 10;
137-
// PopulateTestData(total, 0);
130+
[Fact]
131+
public void Entities_PageResult()
132+
{
133+
//Arrange
134+
const int total = 44;
135+
const int page = 2;
136+
const int pageSize = 10;
137+
PopulateTestData(total, 0);
138138

139-
// //Act
140-
// IQueryable queryable = _context.Blogs.Select("it");
141-
// var count = queryable.Count();
142-
// var result = queryable.PageResult(page, pageSize);
139+
//Act
140+
IQueryable queryable = _context.Blogs.Select("it");
141+
var count = queryable.Count();
142+
var result = queryable.PageResult(page, pageSize);
143143

144-
// //Assert
145-
// Assert.Equal(total, count);
146-
// Assert.Equal(page, result.CurrentPage);
147-
// Assert.Equal(pageSize, result.PageSize);
148-
// Assert.Equal(total, result.RowCount);
149-
// Assert.Equal(5, result.PageCount);
150-
// Assert.Equal(_context.Blogs.Page(page, pageSize).ToArray(), result.Queryable.ToDynamicArray<Blog>());
151-
//}
144+
//Assert
145+
Assert.Equal(total, count);
146+
Assert.Equal(page, result.CurrentPage);
147+
Assert.Equal(pageSize, result.PageSize);
148+
Assert.Equal(total, result.RowCount);
149+
Assert.Equal(5, result.PageCount);
150+
Assert.Equal(_context.Blogs.Page(page, pageSize).ToArray(), result.Queryable.ToDynamicArray<Blog>());
151+
}
152152
#endregion
153153

154154
#region Select Tests

0 commit comments

Comments
 (0)