2011-04-25 15 views
6

¿Cómo busco en dos campos combinados? La búsqueda debería realizarse en el extremo SQL si es posible.Búsqueda de Entity Framework 4 en los campos combinados

Supongamos que tengo una tabla de clientes con nombre y apellido. Me gustaría que los usuarios puedan buscar en ambas columnas usando un solo cuadro de búsqueda.

Mi consulta actualmente se ve así:

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

pero debe ser algo así como

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

Respuesta

14

No es posible a menos que tenga FullName columna también mapeada. La forma de evitar este problema puede ser String.Concat que se permite en las entidades LINQ a:

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

funciona muy bien, THX. –

+0

Intenté agregar una propiedad FullName en una clase parcial, luego usé su versión de String.Concat en lugar de solo combinar las cadenas, y lamentablemente todavía tengo un "El miembro de tipo FullName no es compatible en linq-to-entities" de ninguna manera hacer que esto funcione? –

+2

@Mvision: no puede usar propiedad no asignada en L2E. –

1

Se puede usar una columna calculada en la base de datos y un mapa que por ejemplo,

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

(No es bastante que sé)

Cuestiones relacionadas