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. "

È stato utile?

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 /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top