2013-03-05 7 views
9

Ho una tabella dei farmaci che sto cercando per alcuni nomi di farmaci, ma ho bisogno di cercare più nomi. Qui è dove sono attualmente con esso.Uso di Linq per fare un Contiene più valori

string[] names = new string[2]; 
names[0] = "apixaban"; 
names[1] = "desirudin"; 

var meds = (from m in Medications where names.Any(m.BrandName.Contains) || names.Any(m.GenericName.Contains) select m); 

Quello che ho non funziona, e sono attualmente bloccato. So di essere vicino, ma non riesco a capire cosa c'è che non va.

EDIT

Per chiarimenti, se il nome che sto cercando è desirudina, quindi il marchio o il nome generico sarà più lungo, in modo da avere il contiene sul campo nel database.

MODIFICA 2 Ecco l'errore che ricevo.

Unsupported overload used for query operator 'Any'. 

Ecco quello che ho finalmente finito con

var meds = (from m in db.AdmissionMedications where 
(names.Any(n => m.BrandName.Contains(n)) || names.Any(n => m.GenericName.Contains(n)) 
) select m); 
+0

Si prega di inviare il messaggio di errore se si ottiene uno, o il fatto che venga eseguito senza restituire risultati –

+0

È necessario utilizzare un lambda in il metodo 'Any()', come nella mia risposta. –

risposta

17

Forse somthing come

var meds = (from m in Medications 
      where names.Any(name => name.Equals(m.BrandName) || m.GenericName.Contains(name)) 
      select m); 
+0

Ho aggiornato la mia domanda per chiarire meglio. – Jhorra

+0

@Jhorra, la tua richiesta sembra soddisfacente. Potresti fornire alcuni dati di esempio? E cosa non funziona esattamente con la tua domanda? – aush

+0

Aggiornato la mia risposta con quello che penso tu abbia bisogno –

0

Se ho capito la tua destra:

var meds = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName)); 
+0

Ho aggiornato la mia domanda per chiarire meglio. – Jhorra

0

Basta fare una unire tra la tabella dei farmaci e la matrice dei nomi.

var query = from m in Medications 
      from n in in names 
      where m.BrandNames.Any(bn => bn.Contains(n)) || m.GenericNames.Any(gn => gn.Contains(n)) 
      select m; 
2

Penso che si desidera provare:

var query = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName)); 
0
var x = (from c in Reports where c.HKPlanningQty == xi select c).Select(u=>new {Style=u.Style,QTN=u.HKPlanningQty}).OrderBy(u =>u.Style).Where(v=>v.Style.Contains("44")||v.Style.Contains("58"));