Domanda

Ho provato alcuni modi per utilizzare le query dinamiche LINQ - LINQKit e Libreria di query dinamica LINQ. Non mi piace il secondo perché uccide in qualche modo l'idea di LINQ: essere in grado di controllare le query in fase di compilazione. E con LINQKit non ho trovato un buon esempio per il mio scenario. Inoltre, non mi piace un uso eccessivo della riflessione.

Il mio scenario è il seguente. Ho un servizio web che sta facendo business logic e logica DAL. L'applicazione webforms è separata. Ho alcune pagine con caselle per ogni campo che l'utente vorrebbe filtrare, e anche una casella di testo per inserire ogni valore di filtro. Il mio servizio web ha un metodo GetByFilter in cui passo un elenco. QueryObject è una classe con stringa: filedName, oggetto: fieldValue.

Quindi il mio servizio web riceve un elenco di oggetti query e ora arriva la grande domanda: come tradurlo in query LINQ se il conteggio dei campi e i valori del filtro possono variare?

Cosa c'è di peggio: non uso LINQ2SQL ma uso alcuni DAL personalizzati con repository che possono restituire IQuery se necessario (come questo: http://msdn.microsoft.com/en-us/magazine/dd569757. aspx scorrere fino al repository).

So di poter usare il paging con LINQ2SQL: var PagedData = query.Skip ((iPageNum - 1) * iPageSize) .Take (iPageSize);

Quindi, come posso ottenere i parametri di query dinamici (e iPageNum e iPageSize) da LINQ alla mia implementazione DAL sottostante per eseguire quelle query in un modo specifico del fornitore di dati? Forse devo implementare il mio DAL come fornitore di dati LINQ (non ho idea di come farlo)?

Il problema è che non voglio dipendere da LINQ2SQL (quindi potrei semplicemente implementare i miei repository come wrapper per LINQ2SQL) ma allo stesso tempo voglio avere capacità di query LINQ ovunque fuori dal mio DAL. È possibile?

È stato utile?

Soluzione

È certamente possibile, quello che stai cercando è creare il tuo IQueryable, un "provider LINQ personalizzato" "

Ecco l'articolo MSDN: http://msdn.microsoft.com/ it-it / library / bb546158.aspx e Matt Warren ha una serie di blog: http://blogs.msdn.com/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

Ti consiglio di iniziare per vedere quanto potrebbe essere difficile e se ne vale la pena per te!

Se decidi di non farlo, leggi questo post del blog: http: // www .hanselman.com / blog / RealWorldAppsInDaysNotWeeks.aspx e vedere se ADO.Net Data Services (Astoria) può esserti utile

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top