me encontré con la siguiente pregunta que puede combinar múltiples expresiones Expression<Func<T,bool>>
:Combinar Expresión OrdenarPor con los que la expresión
How to merge two C# Lambda Expressions without an invoke?
Me pregunto si, utilizando una técnica similar, cómo usted va sobre la fusión de un .OrderBy Expression<Func<Entity, Key>>
con.. Donde Expression<Func<Entity, bool>>
en una expresión de tipo, o heredar de tipo, System.Linq.Expressions.Expression
.
Estoy haciendo una clase de estilo QueryProvider realmente cortada para tomar T => T == ...
Func's a través de los métodos públicos .Where
y .OrderBy
. Esto es con la intención de que la expresión que esta clase construye pasa a un QueryTranslator para crear SQL adecuado.
Un QueryTranslator de este estilo, cuando se llama desde un QueryProvider, generalmente toma un System.Linq.Expressions.Expression
como un argumento que luego traduce a SQL.
Puedo seguir y entender la pregunta anterior para unir dos .Where
Funcs. La siguiente entrada en el blog fue particularmente útil para esto, y rastreada a través de cada uno de los ejemplos:
http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
Este artículo CodeProject también fue útil:
http://www.codeproject.com/Articles/24255/Exploring-Lambda-Expression-in-C
Cuando la combinación de un .OrderBy Func con un. Donde Func sin embargo, los dos tienen diferentes argumentos genéricos. En el caso del. Donde es un Func<Entity, bool>
, y en el caso del .OrderBy es un Func<Entity, Key>
.
La fusión de estas dos expresiones, en la superficie, no es tan sencilla como fusionar dos con los mismos argumentos genéricos.
El built-func-Expression-producing-engine (inseguro del término exacto) es capaz de combinar un .Where Func con un .OrderBy Func. Tengo curiosidad sobre lo que ocurre bajo el capó cuando estas dos expresiones se combinan para convertirse en una System.Linq.Expressions.Expression
. ¿Es posible? En caso afirmativo, ¿cómo combinaría un Expression<Func<Entity, bool>>
con un Expression<Func<Entity,Key>>
asumiendo que la Entidad es del mismo tipo en cada Expresión?
¿Cómo debería ser la expresión resultante? – dtb
Debe ser el mismo que .Where (T => T.Name == "Cooper"). OrderBy (T => T.DateOfBirth) – Anthony
Se fusiona '.Where (x => condition1) .Where (x = > condition2) 'to' .Where (x => condition1 && condition) 'pero no puede fusionar' .Where (x => condition) .OrderBy (x => value) 'en el mismo sentido. Entonces, de nuevo, ¿cómo debería ser la expresión resultante? 'queryable.Where (x => condición) .OrderBy (x => value)' no devuelve una expresión, devuelve un 'IQueryable'. –
dtb