Pergunta

Eu tentei algumas maneiras de usar consultas dinâmicas LINQ - LINQKit e LINQ Biblioteca de consulta dinâmica. Eu não gosto do segundo porque alguma forma mata a idéia LINQ - para ser capaz de verificar consultas em tempo de compilação. E com LINQKit I não encontrou um bom exemplo para o meu cenário. Também eu não gosto excessivo uso de reflexão.

Meu cenário é o seguinte. Eu tenho um serviço web que está fazendo lógica de negócio e lógica DAL. A aplicação webforms é separada. Eu tenho alguma página com tickboxes para cada campo que o usuário gostaria de filtro, e também uma caixa de texto para inserir cada valor do filtro. Meu serviço web tem um GetByFilter método onde eu passar alguns List. QueryObject é uma classe com string: filedName, objeto:. FieldValue

Então meu webservice recebe lista de objetos de consulta e agora vem a grande pergunta: como traduzi-lo para consulta LINQ se a contagem de campo e valores de filtro pode variar?

O que é ainda pior - Eu não uso LINQ2SQL mas eu usar algum DAL personalizado com repositórios que podem retornar IQuery se necessário (como este: http://msdn.microsoft.com/en-us/magazine/dd569757. aspx rolagem para Repository).

Eu sei que posso usar paginação com LINQ2SQL: var PagedData = query.Skip ((iPageNum - 1) * iPageSize) .Pegue (iPageSize);

Então, como posso obter os parâmetros de consulta dinâmica (e iPageNum e iPageSize) de LINQ para minha implementação DAL subjacente para executar essas consultas de forma dataprovider específico? Talvez eu tenho que implementar meu DAL como alguns provedor de dados LINQ (não tenho idéia de como fazê-lo)?

O problema é - Eu não quero depender de LINQ2SQL (então eu poderia apenas implementar meus repositórios como uma invólucros para LINQ2SQL), mas ao mesmo tempo eu quero ter LINQ habilidades consultando todos os lugares fora do meu DAL. É possível?

Foi útil?

Solução

É certamente possível, o que você está olhando para é criar seu próprio IQueryable, um "provedor de LINQ personalizado"

Aqui está o artigo MSDN: http://msdn.microsoft.com/ en-us / library / bb546158.aspx e Matt Warren tem uma série de posts sobre ele: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

Eu recomendo começar com ele para ver o quão difícil pode ser e se vale a pena para você!

Se você decidir contra ele, ter uma leitura deste post no blog: http: // www .hanselman.com / blog / RealWorldAppsInDaysNotWeeks.aspx e ver se ADO.Net Data Services (Astoria) são de alguma utilidade para você

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top