2011-04-25 17 views
6

Come si effettua la ricerca su due campi combinati. Se possibile, la ricerca dovrebbe avvenire sul lato SQL.Ricerca Entity Framework 4 su campi combinati

Quindi dire che ho una tabella cliente con nome e cognome. Vorrei che gli utenti fossero in grado di effettuare ricerche su entrambe le colonne utilizzando un'unica casella di ricerca.

La mia domanda al momento si presenta così:

var query = DbContext.Customers 
    .Where(c => c.FirstName.Contains(search) || c.LastName.Contains(search)); 

ma dovrebbe essere qualcosa come

var query = DbContext.Customers 
    .Where(c => c.FullName.Contains(search)); 

risposta

14

Non è possibile se non si ha FullName colonna anche mappato. Il modo per aggirare questo problema può essere String.Concat che è consentito in entità LINQ-to-:

var query = DbContext.Customers 
        .Where(p => String.Concat(p.FirstName, " ", p.LastName) 
             .Contains(search)); 
+0

grandi opere, thx. –

+0

Ho provato ad aggiungere una proprietà FullName in una classe parziale, quindi ho usato la versione String.Concat invece di combinare semplicemente le stringhe e purtroppo ho ancora un "Il membro del tipo FullName non è supportato in linq-to-entities" in alcun modo farlo funzionare? –

+2

@Mvision: non è possibile utilizzare la proprietà non mappata in L2E. –

1

Si potrebbe utilizzare una colonna calcolata nel database e la mappa che esempio

alter table Customer add FullName AS FirstName + ' ' + LastName 

(Non abbastanza lo so)

Problemi correlati