2014-12-22 11 views
5

Provo a creare dinamicamente una query LINQ per la ricerca di dati in tutte le colonne.Qual è il modo più efficiente per cercare il testo di qualsiasi tipo di dati in EF6?

enter image description here

Attualmente, io uso il seguente codice per creare query LINQ dinamica. Tuttavia, è piuttosto buggy quando si occupa di colonne complesse.

var type = property[col.ToLower()].PropertyType; 
var isNullableType = type.IsGenericType && type.GetGenericTypeDefinition() == typeof (Nullable<>); 

if (type.IsValueType && !isNullableType) 
{ 
    filter += col + ".ToString().ToLower().Contains(@" + i + ".ToLower())"; 
} 
else if (isNullableType) 
{ 
    filter += col + ".HasValue ? " + col + ".Value.ToString().ToLower().Contains(@" + i + ".ToLower())" + " : false"; 
} 
else 
{ 
    filter += "(" + col + " != null ? " + col + " : \"\").ToString().ToLower().Contains(@" + i + ".ToLower())"; 
} 

Avete qualche idea per semplificare il mio codice sopra? Sono OK se il tuo suggerimento funziona solo per SQL Server 2008 o versioni successive.

Nota: I dati di colonna possono essere di qualsiasi tipo come intero, stringa, oggetto, enum e possono essere nulli.

+0

E 'stato ok se ci ha mostrato SQL generato finale. – KumarHarsh

+0

Questa è una funzione comune per qualsiasi controllo della tabella di dati. Non vi è alcun vantaggio nel mostrare all'utente una query SQL generata. Normalmente, la richiesta Ajax viene inviata dalla pagina web. Sul lato server, filtra i dati in modo dinamico, ordina i dati in modo dinamico in base alla colonna specificata, salta e acquisisce i dati appropriati in base alla pagina specificata. –

risposta

-1

Se si desidera scrivere una query Entity Framework che implementa una ricerca in stile parola chiave che restituisce righe la cui descrizione contiene parte o tutte un determinato gruppo di parole chiave, è possibile utilizzare PredicateBuilder.

Per la creazione predicato dinamico da stringa letta:

Using a string where clause with PredicateBuilder in LinqPad for creating dynamic where clause

LINQ and Dynamic Predicate Construction at Runtime

+0

Il builder Predicate è proprio il wrapper delle condizioni. Non può creare dinamicamente condizioni da stringhe non come il mio codice sorgente in questione. –

+0

Naturalmente è possibile creare dinamicamente condizioni da stringa, ma è necessario sapere come farlo. –

+0

Penso che tu fraintenda su cosa significhi LINQ dinamico. Il predicato dinamico ci consente semplicemente di aggiungere in modo dinamico nuove condizioni in fase di esecuzione. Ma è ancora necessario specificare il nome della colonna quando si crea un predicato. –

Problemi correlati