使用 Linq 执行包含多个值的 Contains

问题描述 投票:0回答:6

我有一个药物表,我正在寻找某些药物名称,但我需要搜索多个名称。 这就是我目前所处的位置。

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);
c# linq contains
6个回答
36
投票

也许类似

C# Linq:

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

扩展方法:

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

1
投票

我想你想尝试:

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

1
投票

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

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;

0
投票

如果我理解你的权利:

var meds = 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"));

0
投票

对于将来的人,请记住,在名称为

names.Any()
的情况下调用
list<T>
会导致错误,因为(如果我理解正确的话),LINQ 在将查询转换为 SQL 时只能处理
IQueryable
列表。

这可以通过调用

var queryableNames = names.AsQueryable()
并使用
queryableNames
来解决

© www.soinside.com 2019 - 2024. All rights reserved.