forked from samus/mongodb-csharp
-
Notifications
You must be signed in to change notification settings - Fork 1
/
MongoQuery.cs
69 lines (60 loc) · 1.52 KB
/
MongoQuery.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using MongoDB.Driver;
namespace MongoDB.Linq
{
public class MongoQuery : IMongoQuery
{
private readonly IMongoQueryProvider queryProvider;
private readonly Expression expression;
private MongoQuerySpec querySpec;
public MongoQuery(IMongoQueryProvider queryProvider)
{
this.queryProvider = queryProvider;
expression = Expression.Constant(this);
}
public MongoQuery(IMongoQueryProvider queryProvider, Expression expression)
{
this.queryProvider = queryProvider;
this.expression = expression;
}
public IEnumerator<Document> GetEnumerator()
{
return ((IEnumerable<Document>)queryProvider.Execute(expression)).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable)queryProvider.Execute(expression)).GetEnumerator();
}
public Expression Expression
{
get { return expression; }
}
public Type ElementType
{
get { return typeof(Document); }
}
public IQueryProvider Provider
{
get { return queryProvider; }
}
private MongoQuerySpec QuerySpec
{
get
{
if (querySpec == null)
{
querySpec = queryProvider.GetQuerySpec(expression);
}
return querySpec;
}
}
public Document Query { get { return QuerySpec.Query; } }
public int Limit { get { return QuerySpec.Limit; } }
public int Skip { get { return QuerySpec.Skip; } }
public Document Fields { get { return QuerySpec.Fields; } }
}
}