Skip to content

Commit 60d4c38

Browse files
jogibear9988StefH
authored andcommitted
IQueryable should use Queryable for Aggregates (#115)
Dynamic Linq Query not usable with ORM Provider (fix for #114)
1 parent 5415657 commit 60d4c38

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

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

+7-4
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,10 @@ Expression ParseIn()
577577
var typeArgs = new[] { left.Type };
578578
args = new[] { right, left };
579579

580-
accumulate = Expression.Call(typeof(Enumerable), containsSignature.Name, typeArgs, args);
580+
var enumerableType = typeof(Enumerable);
581+
if (!typeof(IQueryable).IsAssignableFrom(right.Type))
582+
enumerableType = typeof(Queryable);
583+
accumulate = Expression.Call(enumerableType, containsSignature.Name, typeArgs, args);
581584
}
582585
else
583586
throw ParseError(op.Pos, Res.OpenParenOrIdentifierExpected);
@@ -1518,7 +1521,7 @@ Expression ParseMemberAccess(Type type, Expression instance)
15181521
if (enumerableType != null)
15191522
{
15201523
Type elementType = enumerableType.GetTypeInfo().GetGenericTypeArguments()[0];
1521-
return ParseAggregate(instance, elementType, id, errorPos);
1524+
return ParseAggregate(instance, elementType, id, errorPos, FindGenericType(typeof(IQueryable<>), type) != null);
15221525
}
15231526
}
15241527

@@ -1625,7 +1628,7 @@ Type FindType(string name)
16251628
return null;
16261629
}
16271630

1628-
Expression ParseAggregate(Expression instance, Type elementType, string methodName, int errorPos)
1631+
Expression ParseAggregate(Expression instance, Type elementType, string methodName, int errorPos, bool isQueryable)
16291632
{
16301633
var oldParent = _parent;
16311634

@@ -1701,7 +1704,7 @@ Expression ParseAggregate(Expression instance, Type elementType, string methodNa
17011704
}
17021705
}
17031706

1704-
return Expression.Call(typeof(Enumerable), signature.Name, typeArgs, args);
1707+
return Expression.Call(isQueryable ? typeof(Queryable) : typeof(Enumerable), signature.Name, typeArgs, args);
17051708
}
17061709

17071710
Expression[] ParseArgumentList()

0 commit comments

Comments
 (0)