Come posso fare un Contains () in DLINQ con un elenco di elementi?
-
03-07-2019 - |
Domanda
Voglio creare una query dlinq che controlla se un titolo contiene un numero qualsiasi di elementi. So che puoi fare .Contains ()
con un elenco, ma devo verificare se il titolo contiene uno degli elementi, non se gli elementi contengono parte del titolo. Ad esempio: ho tre voci nell'elenco " pancetta, pollo, maiale " . Ho bisogno che il titolo di " pollaio " corrisponda.
var results = (from l in db.Sites
where list.Contains(l.site_title)
select l.ToBusiness(l.SiteReviews)).ToList();
Se provo le prime 2 risposte, ottengo un errore " La sequenza locale non può essere utilizzata nell'implementazione LINQ to SQL degli operatori di query tranne l'operatore Contains (). "
La terza soluzione mi dà
Il metodo 'System.Object DynamicInvoke (System.Object [])' non ha una traduzione supportata in SQL. "
Soluzione 3
Alla fine l'ho capito. Grazie al mio caro amico Cory per l'aiuto. Esistono due modi per farlo.
var resultSets = (from k in list
select (from b in db.Sites
where b.site_title.Contains(k)
select b.ToBusiness()).ToList<Business>()).ToList();
List<Business> all = new List<Business>();
for (int i = 0; i < resultSets.Count; ++i)
{
all.AddRange(resultSets[i]);
}
Questa è una query linq che farà correttamente ciò che viene dichiarato. Inoltre, puoi anche creare manualmente la query sql in testo normale.
Altri suggerimenti
Prova quanto segue. Puoi utilizzare una combinazione di Where e Any per cercare corrispondenze di sottostringhe.
var results = (from l in db.Sites
where list.Where(x => 0 != x.IndexOf(l)).Any()
select l.ToBusiness(l.SiteReviews)).ToList();
Un modo è costruire dinamicamente una query come indicato qui:
http://andrewpeters.net/2007/ 04/24 / dinamici-LINQ query-contiene-operatore /