C# 使用Linq执行包含多个值的操作

C# 使用Linq执行包含多个值的操作,c#,linq,contains,C#,Linq,Contains,我有一个药物表,我正在寻找某些药物名称,但我需要搜索多个名称。这就是我目前使用它的地方 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); 我所拥有的

我有一个药物表,我正在寻找某些药物名称,但我需要搜索多个名称。这就是我目前使用它的地方

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);
我所拥有的一切都不起作用了,我现在陷入了困境。我知道我很接近,但我不太清楚到底出了什么问题

编辑

为了澄清,如果我正在搜索的名称是desirudin,那么品牌名或通用名将更长,因此我必须在数据库的字段中包含

编辑2 这是我收到的错误

Unsupported overload used for query operator 'Any'.
这就是我最终的结局

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

如果我理解你的权利:

var meds = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName));
也许是这样的

林克:

扩展方法:

List<Medication> meds = Medications
    .Where( med =>
        names.Any( name =>
            name.Equals( med.BrandName ) || med.GenericName.Contains( name )
        )
    )
    .ToList();
列出药物=药物
.Where(med=>
name.Any(name=>
name.Equals(med.BrandName)| | med.GenericName.Contains(name)
)
)
.ToList();

只需在药物表和名称数组之间进行连接即可

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;

我想你应该试试:

var query = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName));

如果您收到错误消息,请发布错误消息,或者它运行时没有返回结果。您需要在
Any()
方法中使用lambda,就像在我的回答中一样。@Jhorra,您的查询似乎很好。你能提供一些样本数据吗?你的问题到底有什么问题?用我认为你需要的东西更新了我的答案你的答案最接近我想要的。我不得不调整它,但它在正确的轨道上,得到了我所需要的。它将只比较单个值。如果我需要在时间和条件下比较这两个值呢。
var query = Medications.Where(m => names.Contains(m.BrandName) || names.Contains(m.GenericName));
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"));