2010-10-27 16 views
6

Tengo una solicitud de una función para poder guardar la búsqueda de un usuario para más adelante.¿Cuál es la forma más fácil de guardar una consulta LINQ para su uso posterior?

Ahora mismo estoy construyendo declaraciones LINQ sobre la marcha en base a lo que el usuario ha especificado.

Así que comencé a preguntarme: ¿hay alguna manera fácil para mí de simplemente tomar la consulta que el usuario creó y conservarla en alguna parte, preferiblemente en mi base de datos, para poder recuperarla más tarde?

¿Hay alguna forma de persistir en la consulta como XML o quizás JSON, y luego reconstituir la consulta más tarde?

Respuesta

3

Nunca hecho esto antes, pero he tenido esta idea:

En lugar de tener la carrera consulta contra la base de datos directamente, si tuviera que hacer que se ejecute en contra de un punto final OData, que posiblemente podría extraer la URL que se genera como la cadena de consulta, y guardar esa URL para su uso posterior. Ya que OData ya tiene una especificación bien pensada, usted podría beneficiarse del trabajo de otras personas.

+0

Eso no es una idea a medias mala. Entonces, ¿tendría que construir un punto final OData en mi servidor, y simplemente consumir eso en mi sitio web para consultas guardadas? ¿Esa es la idea? – Joseph

+0

Sí, esa es la idea. Lo bueno es que el punto final sería tan público como usted quisiera, y podría restringirlo para incluir solo un subconjunto de su modelo. De la misma manera que podemos conectarnos a StackOverflow con LinqPad para descubrir métricas interesantes, puede permitir que ciertos clientes o analistas de negocios tengan una vista flexible y consultable en sus datos. Además, al crear la capa adicional, incluso si su modelo subyacente cambia, puede asegurarse de que el modelo del punto final de OData permanezca igual. – StriplingWarrior

0

Eche un vistazo a la clase Expression. Esto le permitirá precompilar una consulta. Aunque persistir esto para su posterior uso en la base de datos para un mejor rendimiento es cuestionable.

+0

algo así como System.Data.Linq.CompiledQuery o se estaba refiriendo a algo más? – Joseph

3

Iría con un objeto específico del dominio aquí, incluso si existieran tales cosas buenas: qué sucede cuando guardas consultas serializadas en LINQ y los cambios de tu modelo subyacente, invalidando las consultas guardadas de todos. Usar su propio formato de datos debería protegerlo de esto hasta cierto punto.

+0

No estoy realmente preocupado por el cambio de mi modelo subyacente. No digo que no sea una preocupación válida, pero en mi caso no tengo que preocuparme por el cambio de mi modelo. – Joseph

+0

No hablamos de su modelo, sino de las instalaciones (quizás inexistentes de todos modos) para la serialización de consultas. Apuesto que cualquier vida cambiará con internos a medida que evolucione el Marco. –

0

Estoy escribiendo esto cuando miro this presentation en PDC10. Justo después de la marca de 1 hora, muestra cómo ha creado un serializador JSON para árboles de expresiones. Puede que lo encuentres interesante.

Cuestiones relacionadas