SelectManyExpression.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* Copyright 2015-present MongoDB Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using System;
  16. using System.Linq.Expressions;
  17. using MongoDB.Driver.Core.Misc;
  18. namespace MongoDB.Driver.Linq.Expressions
  19. {
  20. internal sealed class SelectManyExpression : ExtensionExpression, ISourcedExpression
  21. {
  22. private readonly string _collectionItemName;
  23. private readonly Expression _collectionSelector;
  24. private readonly string _resultItemName;
  25. private readonly Expression _resultSelector;
  26. private readonly Expression _source;
  27. public SelectManyExpression(Expression source, string collectionItemName, Expression collectionSelector, string resultItemName, Expression resultSelector)
  28. {
  29. _source = Ensure.IsNotNull(source, nameof(source));
  30. _collectionItemName = Ensure.IsNotNull(collectionItemName, nameof(collectionItemName));
  31. _collectionSelector = Ensure.IsNotNull(collectionSelector, nameof(collectionSelector));
  32. _resultItemName = Ensure.IsNotNull(resultItemName, nameof(resultItemName));
  33. _resultSelector = Ensure.IsNotNull(resultSelector, nameof(resultSelector));
  34. }
  35. public override ExtensionExpressionType ExtensionType
  36. {
  37. get { return ExtensionExpressionType.SelectMany; }
  38. }
  39. public string CollectionItemName
  40. {
  41. get { return _collectionItemName; }
  42. }
  43. public Expression CollectionSelector
  44. {
  45. get { return _collectionSelector; }
  46. }
  47. public string ResultItemName
  48. {
  49. get { return _resultItemName; }
  50. }
  51. public Expression ResultSelector
  52. {
  53. get { return _resultSelector; }
  54. }
  55. public Expression Source
  56. {
  57. get { return _source; }
  58. }
  59. public override Type Type
  60. {
  61. get { return _source.Type; }
  62. }
  63. public override string ToString()
  64. {
  65. return string.Format("{0}.SelectMany({1})", _source.ToString(), _resultSelector.ToString());
  66. }
  67. public SelectManyExpression Update(Expression source, Expression collectionSelector, Expression resultSelector)
  68. {
  69. if (source != _source ||
  70. collectionSelector != _collectionSelector ||
  71. resultSelector != _resultSelector)
  72. {
  73. return new SelectManyExpression(
  74. source,
  75. _collectionItemName,
  76. collectionSelector,
  77. _resultItemName,
  78. resultSelector);
  79. }
  80. return this;
  81. }
  82. protected internal override Expression Accept(ExtensionExpressionVisitor visitor)
  83. {
  84. return visitor.VisitSelectMany(this);
  85. }
  86. }
  87. }