2011-04-25 10 views
6

Jak wyszukiwać na dwóch połączonych polach. Wyszukiwanie powinno się odbywać na końcu SQL, jeśli to możliwe.Entity Framework 4 wyszukaj na połączonych polach

Powiedzmy, że mam tabelę klientów z imieniem i nazwiskiem. Chciałbym, aby użytkownicy mogli przeszukiwać obie te kolumny przy użyciu jednego pola wyszukiwania.

Moja kwerenda aktualnie wygląda tak:

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

ale powinno to być coś podobnego

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

Odpowiedz

14

To nie jest możliwe, chyba że masz FullName kolumna odwzorowane również. Sposób obejścia tego problemu może być String.Concat który jest dozwolony w LINQ-podmioty:

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

działa świetnie, thx. –

+0

Próbowałem dodać właściwość FullName w klasie częściowej, a następnie użyłem twojej wersji String.Concat zamiast po prostu łączenia ciągów, i niestety wciąż mam "Typ członka FullName nie jest obsługiwany w linq-to-entity" w żaden sposób czy to działa? –

+2

@Mvision: Nie można użyć nieprzypisanej właściwości w L2E. –

1

Można użyć kolumna obliczana w bazie danych i map, które np

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

(Nie bardzo wiem)

Powiązane problemy