2010-09-20 11 views
6

Sto cercando di recuperare un elenco di stringa in cui essa contiene "Britney Spears", e questo è quello che usoLINQ2SQL come il comando per frase

from p in Objects 
where p.Title.Contains("Britney Spears") 
select p 

Questo funziona bene, ma se voglio per selezionare il titolo che è "Britney Jean Spears", "Britney" Sexy "Spears" non funziona, quindi la mia domanda è: come inserire un carattere jolly "%" tra Britney Spears mentre conduco una ricerca LINQ2SQL? Grazie.

Cordiali saluti, Andy.

risposta

13

È possibile utilizzare il metodo SqlMethods.Like per questo scopo.

from p in Objects 
where SqlMethods.Like(p.Title, "Britney% Spears") 
select p 
+0

Oh questa è un'alternativa molto più bella. –

+0

Grazie mille, questo è molto utile. – cherhan

-1

fare esattamente come si farebbe con SQL verso l'alto

puoi fornire i caratteri speciali con la clausola like come ad esempio "", '%' e '[]'

se questo non è abbastanza buono , quindi puoi usare regex, ma fai attenzione poiché la regex verrà eseguita "client" -side, cioè recupererà tutto e poi cercherà di restringere i risultati in memoria. È un po 'possibile ottimizzare il metodo zerkms' facendo

from p in Objects 
where p.Title.Contains("Britney") && p.Title.Contains("Spears") && regex.Match(p.Title).Success 
select p 

non ho ancora testato, ma dovrebbe funzionare prime due condizioni sul lato server SQL e quindi restringere utilizzando espressioni regolari.

+4

Questo non funzionerà con Linq2Sql; dovrai chiamare 'AsEnumerable' prima di applicare la regex. – Ani

0

Basta usare StartsWith() e EndsWith() per simulare il modello. AFAIK, LINQ-to-SQL non supporta i caratteri jolly.

from p in Objects 
where p.Title.StartsWith("Britney") && c.Title.EndsWith("Spears") 
select p; 

In caso contrario, è possibile eseguire una query direttamente se si dispone di un motivo più complesso.

db.ExecuteQuery<MyObject>("SELECT * " 
         + "FROM Objects " 
         + "WHERE Title LIKE 'Britney%Spears'"); 
Problemi correlati