使用 Linq 执行具有多个值的包含

Posted

技术标签:

【中文标题】使用 Linq 执行具有多个值的包含【英文标题】:Using Linq to do a Contains with multiple values 【发布时间】:2013-02-20 13:17:59 【问题描述】:

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

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,那么 BrandName 或 Generic 名称会更长,所以我必须在数据库中的字段上包含 contains。

编辑 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);

【问题讨论】:

如果您收到错误消息,或者它运行但没有返回结果的事实,请发布错误消息 您需要在 Any() 方法中使用 lambda,就像我的回答一样。 【参考方案1】:

可能是这样的

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();

【讨论】:

@Jhorra,那么您的查询似乎很好。你能提供一些样本数据吗?您的查询到底有什么问题? 用我认为你需要的东西更新了我的答案 你的最接近我想要的。我不得不对其进行调整,但它在正确的轨道上并为我提供了我需要的东西。【参考方案2】:
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"));

【讨论】:

【参考方案3】:

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

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;

【讨论】:

【参考方案4】:

我想你想试试:

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

【讨论】:

它只会比较单个值。如果我需要在时间和条件下比较两个值怎么办。【参考方案5】:

如果我理解你的权利:

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

【讨论】:

以上是关于使用 Linq 执行具有多个值的包含的主要内容,如果未能解决你的问题,请参考以下文章

LINQ:获取包含具有特定名称和值的属性的数组中的对象

PostgreSQL 中具有特定模式的 Linq 和实体迁移

如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录

使用 LINQ 将具有相同值的多行列表连接成单行

c#基础并行Linq

我需要从 sql 中选择具有不同值的列