Reputation: 6321
I have a medication table that I'm looking for certain drug names, but I need to search for multiple names. Here is where I currently am with it.
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);
What I have isn't working, and I'm currently stuck. I know I'm close, but I can't quite figure out what's wrong.
EDIT
For clarification, if the name I'm searching for is desirudin, then the BrandName or Generic name will be longer, so I have to have the contains on the field in the database.
EDIT 2 Here is the error I recieve.
Unsupported overload used for query operator 'Any'.
Here is what I finally ended up with
var meds = (from m in db.AdmissionMedications where
(names.Any(n => m.BrandName.Contains(n)) || names.Any(n => m.GenericName.Contains(n))
) select m);
Upvotes: 20
Views: 137179
Reputation: 71
For people in the future, keep in mind that calling names.Any()
where names is a list<T>
causes errors since (if I understand correctly), LINQ can only handle IQueryable
lists when translating a query to SQL.
This can be handled by calling var queryableNames = names.AsQueryable()
and using queryableNames
instead
Upvotes: 0
Reputation: 43636
Maybe somthing like
C# Linq:
var meds = (from m in Medications
where names.Any(name => name.Equals(m.BrandName) || m.GenericName.Contains(name))
select m);
Extension methods:
List<Medication> meds = Medications
.Where( med =>
names.Any( name =>
name.Equals( med.BrandName ) || med.GenericName.Contains( name )
)
)
.ToList();
Upvotes: 36
Reputation: 109
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"));
Upvotes: 0
Reputation: 3987
Just do a join between the medication table and the names array.
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;
Upvotes: 1
Reputation: 1879
I think you want to try:
var query = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName));
Upvotes: 1
Reputation: 2108
If I've understood your right:
var meds = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName));
Upvotes: 0