55// Created: 2008.12.02
66
77using System ;
8- using System . Collections . Generic ;
98using System . Linq ;
109using System . Linq . Expressions ;
1110using System . Reflection ;
@@ -20,18 +19,21 @@ internal static class ExpressionExtensions
2019 {
2120 public static void EnsureKeyExpressionCompatible ( this KeyExpression left , KeyExpression right , Expression expressionPart )
2221 {
23- if ( left == null || right == null )
22+ if ( left == null || right == null ) {
2423 return ;
24+ }
2525
2626 if ( left . EntityType . IsInterface || right . EntityType . IsInterface ) {
27- if ( left . EntityType . Key . EqualityIdentifier != right . EntityType . Key . EqualityIdentifier )
27+ if ( left . EntityType . Key . EqualityIdentifier != right . EntityType . Key . EqualityIdentifier ) {
2828 throw new InvalidOperationException ( string . Format (
2929 Strings . ExKeysOfXAndXNotCompatible , expressionPart . ToString ( true ) , left . EntityType , right . EntityType ) ) ;
30+ }
3031 }
3132 else {
32- if ( left . EntityType . Hierarchy != right . EntityType . Hierarchy )
33+ if ( left . EntityType . Hierarchy != right . EntityType . Hierarchy ) {
3334 throw new InvalidOperationException ( string . Format (
3435 Strings . ExEntitiesXAndXBelongToDifferentHierarchies , expressionPart . ToString ( true ) , left . EntityType , right . EntityType ) ) ;
36+ }
3537 }
3638 }
3739
@@ -41,173 +43,170 @@ public static bool IsAnonymousConstructor(this Expression expression)
4143 return expression . NodeType == ExpressionType . New && expression . GetMemberType ( ) == MemberType . Anonymous ;
4244 }
4345
44- public static bool IsNewExpressionSupportedByStorage ( this Expression expression )
45- {
46- return expression . NodeType == ExpressionType . New
47- && ( expression . Type == WellKnownTypes . TimeSpan
48- || expression . Type == WellKnownTypes . DateTime
49- || expression . Type == WellKnownTypes . DateTimeOffset ) ;
50- }
46+ public static bool IsNewExpressionSupportedByStorage ( this Expression expression ) =>
47+ expression . NodeType == ExpressionType . New
48+ && ( expression . Type == WellKnownTypes . TimeSpan
49+ || expression . Type == WellKnownTypes . DateTime
50+ || expression . Type == WellKnownTypes . DateTimeOffset ) ;
5151
52- public static bool IsConversionOperation ( this Expression expression )
53- {
54- expression = expression . StripMarkers ( ) ;
55- return expression . NodeType == ExpressionType . Convert || expression . NodeType == ExpressionType . TypeAs ;
56- }
57-
58- public static bool IsQuery ( this Expression expression )
59- {
60- return expression . Type . IsOfGenericInterface ( WellKnownInterfaces . QueryableOfT ) ;
61- }
52+ public static bool IsQuery ( this Expression expression ) =>
53+ expression . Type . IsOfGenericInterface ( WellKnownInterfaces . QueryableOfT ) ;
6254
63- public static bool IsLocalCollection ( this Expression expression , TranslatorContext context )
64- {
65- return expression != null
66- && ! expression . IsProjection ( )
67- && ! expression . IsGroupingExpression ( )
68- && ! expression . IsEntitySet ( )
69- && ! expression . IsSubqueryExpression ( )
70- && expression . Type != WellKnownTypes . String
71- && expression . Type . IsOfGenericInterface ( WellKnownInterfaces . EnumerableOfT )
72- && ( IsEvaluableCollection ( context , expression ) || IsForeignQuery ( expression ) ) ;
73- }
55+ public static bool IsLocalCollection ( this Expression expression , TranslatorContext context ) =>
56+ expression != null
57+ && ! expression . IsProjection ( )
58+ && ! expression . IsGroupingExpression ( )
59+ && ! expression . IsEntitySet ( )
60+ && ! expression . IsSubqueryExpression ( )
61+ && expression . Type != WellKnownTypes . String
62+ && expression . Type . IsOfGenericInterface ( WellKnownInterfaces . EnumerableOfT )
63+ && ( IsEvaluableCollection ( context , expression ) || IsForeignQuery ( expression ) ) ;
7464
75- private static bool IsEvaluableCollection ( TranslatorContext context , Expression expression )
76- {
77- return ! expression . Type . IsOfGenericInterface ( WellKnownInterfaces . QueryableOfT )
78- && context . Evaluator . CanBeEvaluated ( expression ) ;
79- }
65+ private static bool IsEvaluableCollection ( TranslatorContext context , Expression expression ) =>
66+ ! expression . Type . IsOfGenericInterface ( WellKnownInterfaces . QueryableOfT )
67+ && context . Evaluator . CanBeEvaluated ( expression ) ;
8068
8169 private static bool IsForeignQuery ( Expression expression )
8270 {
8371 // Check for EnumerableQuery<T> and similar things
84- if ( expression . NodeType == ExpressionType . Constant ) {
85- var value = ( ( ConstantExpression ) expression ) . Value as IQueryable ;
86- if ( value != null ) {
72+ if ( expression . NodeType == ExpressionType . Constant ) {
73+ if ( ( ( ConstantExpression ) expression ) . Value is IQueryable value ) {
8774 var type = value . GetType ( ) ;
8875 if ( type . IsGenericType ) {
8976 var definition = type . GetGenericTypeDefinition ( ) ;
90- return definition != WellKnownInterfaces . QueryableOfT && definition != WellKnownTypes . QueryableOfT ;
77+ return definition != WellKnownInterfaces . QueryableOfT && definition != WellKnownTypes . QueryableOfT ;
9178 }
9279 }
9380 }
81+
9482 return false ;
9583 }
9684
9785 public static bool IsItemProjector ( this Expression expression )
9886 {
9987 expression = expression . StripMarkers ( ) ;
100- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . ItemProjector ;
88+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . ItemProjector ;
10189 }
10290
10391 public static bool IsProjection ( this Expression expression )
10492 {
10593 expression = expression . StripMarkers ( ) ;
106- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Projection ;
94+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Projection ;
10795 }
10896
10997 public static bool IsEntitySetProjection ( this Expression expression )
11098 {
11199 expression = expression . StripMarkers ( ) ;
112- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . EntitySet ;
100+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . EntitySet ;
113101 }
114102
115103 public static bool IsGroupingExpression ( this Expression expression )
116104 {
117105 expression = expression . StripMarkers ( ) ;
118- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Grouping ;
106+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Grouping ;
119107 }
120108
121109 public static bool IsSubqueryExpression ( this Expression expression )
122110 {
123111 expression = expression . StripMarkers ( ) ;
124- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . SubQuery ;
112+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . SubQuery ;
125113 }
126114
127115 public static bool IsFullTextMatchExpression ( this Expression expression )
128116 {
129117 expression = expression . StripMarkers ( ) ;
130- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . FullText ;
118+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . FullText ;
131119 }
132120
133121 public static bool IsEntityExpression ( this Expression expression )
134122 {
135123 expression = expression . StripMarkers ( ) ;
136- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Entity ;
124+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . Entity ;
137125 }
138126
139127 public static bool IsEntitySetExpression ( this Expression expression )
140128 {
141129 expression = expression . StripMarkers ( ) ;
142- return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . EntitySet ;
130+ return ( ExtendedExpressionType ) expression . NodeType == ExtendedExpressionType . EntitySet ;
143131 }
144132
145- public static bool IsEntitySet ( this Expression expression )
146- {
147- return expression . Type . IsGenericType
148- && expression . Type . GetGenericTypeDefinition ( ) == WellKnownOrmTypes . EntitySetOfT ;
149- }
150-
151- public static Type GetGroupingKeyType ( this Expression expression )
152- {
153- var newExpression = ( NewExpression ) expression . StripCasts ( ) ;
154- return newExpression . Type . GetGenericArguments ( ) [ 0 ] ;
155- }
133+ public static bool IsEntitySet ( this Expression expression ) =>
134+ expression . Type . IsGenericType
135+ && expression . Type . GetGenericTypeDefinition ( ) == WellKnownOrmTypes . EntitySetOfT ;
156136
157137 public static Expression StripMarkers ( this Expression e )
158138 {
159- var ee = e as ExtendedExpression ;
160- if ( ee != null && ee . ExtendedType == ExtendedExpressionType . Marker ) {
139+ if ( e is ExtendedExpression ee && ee . ExtendedType == ExtendedExpressionType . Marker ) {
161140 var marker = ( MarkerExpression ) ee ;
162141 return marker . Target ;
163142 }
143+
164144 return e ;
165145 }
166146
167147 public static bool IsMarker ( this Expression e )
168148 {
169149 e = e . StripCasts ( ) ;
170- return ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Marker ;
150+ return ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Marker ;
171151 }
172152
173153 public static bool TryGetMarker ( this Expression e , out MarkerType markerType )
174154 {
175155 e = e . StripCasts ( ) ;
176156 markerType = MarkerType . None ;
177- var result = ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Marker ;
157+ var result = ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Marker ;
178158 if ( result ) {
179159 var marker = ( MarkerExpression ) e ;
180160 markerType = marker . MarkerType ;
181161 }
162+
182163 return result ;
183164 }
184165
185166 public static MemberType GetMemberType ( this Expression e )
186167 {
187168 e = e . StripMarkers ( ) ;
188169 var type = e . Type ;
189- if ( WellKnownOrmTypes . Key . IsAssignableFrom ( type ) )
170+ if ( WellKnownOrmTypes . Key . IsAssignableFrom ( type ) ) {
190171 return MemberType . Key ;
191- if ( WellKnownOrmInterfaces . Entity . IsAssignableFrom ( type ) )
172+ }
173+
174+ if ( WellKnownOrmInterfaces . Entity . IsAssignableFrom ( type ) ) {
192175 return MemberType . Entity ;
193- if ( WellKnownOrmTypes . Structure . IsAssignableFrom ( type ) )
176+ }
177+
178+ if ( WellKnownOrmTypes . Structure . IsAssignableFrom ( type ) ) {
194179 return MemberType . Structure ;
195- if ( WellKnownOrmTypes . EntitySetBase . IsAssignableFrom ( type ) )
180+ }
181+
182+ if ( WellKnownOrmTypes . EntitySetBase . IsAssignableFrom ( type ) ) {
196183 return MemberType . EntitySet ;
197- if ( type . IsAnonymous ( ) )
184+ }
185+
186+ if ( type . IsAnonymous ( ) ) {
198187 return MemberType . Anonymous ;
199- if ( e . IsGroupingExpression ( ) )
188+ }
189+
190+ if ( e . IsGroupingExpression ( ) ) {
200191 return MemberType . Grouping ;
201- if ( e . IsSubqueryExpression ( ) )
192+ }
193+
194+ if ( e . IsSubqueryExpression ( ) ) {
202195 return MemberType . Subquery ;
203- if ( e . IsFullTextMatchExpression ( ) )
196+ }
197+
198+ if ( e . IsFullTextMatchExpression ( ) ) {
204199 return MemberType . FullTextMatch ;
205- if ( type . IsArray )
200+ }
201+
202+ if ( type . IsArray ) {
206203 return MemberType . Array ;
204+ }
207205
208- if ( ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Field
209- || ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Column )
206+ if ( ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Field
207+ || ( ExtendedExpressionType ) e . NodeType == ExtendedExpressionType . Column ) {
210208 return MemberType . Primitive ;
209+ }
211210
212211 return MemberType . Unknown ;
213212 }
@@ -220,10 +219,12 @@ public static ParameterInfo[] GetConstructorParameters(this NewExpression expres
220219
221220 // ReSharper disable ConditionIsAlwaysTrueOrFalse
222221 // ReSharper disable HeuristicUnreachableCode
223- if ( expression . Constructor == null )
222+ if ( expression . Constructor == null ) {
224223 return new ParameterInfo [ 0 ] ;
224+ }
225225 // ReSharper restore ConditionIsAlwaysTrueOrFalse
226226 // ReSharper restore HeuristicUnreachableCode
227+
227228 return expression . Constructor . GetParameters ( ) ;
228229 }
229230 }
0 commit comments