Skip to content

Commit f7cf7fb

Browse files
alex687craiggwilson
authored andcommitted
CSHARP-1664 Adding AsQuerableBinder to infoBinders, getting the dynamically created expression , some unit tests
1 parent c4d7540 commit f7cf7fb

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

src/MongoDB.Driver/Linq/ExpressionHelper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ internal static class ExpressionHelper
2222
{
2323
public static LambdaExpression GetLambda(Expression node)
2424
{
25+
if (node.NodeType == ExpressionType.Constant && ((ConstantExpression)node).Value is LambdaExpression)
26+
{
27+
return (LambdaExpression)((ConstantExpression)node).Value;
28+
}
29+
2530
return (LambdaExpression)StripQuotes(node);
2631
}
2732

src/MongoDB.Driver/Linq/Processors/EmbeddedPipeline/EmbeddedPipelineBinder.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ static EmbeddedPipelineBinder()
5252
infoBinder.Register(new ToListBinder(), ToListBinder.GetSupportedMethods());
5353
infoBinder.Register(new UnionBinder(), UnionBinder.GetSupportedMethods());
5454
infoBinder.Register(new WhereBinder(), WhereBinder.GetSupportedMethods());
55+
infoBinder.Register(new AsQuerableBinder(), AsQuerableBinder.GetSupportedMethods());
5556

5657
var nameBinder = new NameBasedMethodCallBinder<EmbeddedPipelineBindingContext>();
5758
nameBinder.Register(new ContainsBinder(), ContainsBinder.IsSupported, ContainsBinder.SupportedMethodNames);

tests/MongoDB.Driver.Tests/Linq/MongoQueryableTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,6 +1446,18 @@ public void Where_method_with_predicated_any()
14461446
"{ $match: { 'G.D': \"Don't\" } }");
14471447
}
14481448

1449+
1450+
[Test]
1451+
public void AsQuerable_method_inside_where()
1452+
{
1453+
var query = CreateQuery()
1454+
.Where(x => x.G.AsQueryable().Any(g => g.D == "Don't"));
1455+
1456+
Assert(query,
1457+
1,
1458+
"{ $match: { 'G.D': \"Don't\" } }");
1459+
}
1460+
14491461
private List<T> Assert<T>(IMongoQueryable<T> queryable, int resultCount, params string[] expectedStages)
14501462
{
14511463
var executionModel = (AggregateQueryableExecutionModel<T>)queryable.GetExecutionModel();

0 commit comments

Comments
 (0)