【问题标题】:LINQ: Multiple LIKE clauses in a single predicateLINQ:单个谓词中的多个 LIKE 子句
【发布时间】:2012-11-28 15:17:48
【问题描述】:

我想做一个 LINQ 查询,可以将多个变量与单个字符串进行比较。我见过LINQ for LIKE queries of array elements,它很有帮助,但并不完全。我需要反过来。

我想做的是:假设我有一个Company 对象,其中包含NameAddress。我还有一个字符串keyword。然后,我想在keywordNameAddress 的列表中找到所有Companys。在 SQL 中它将是...

SELECT * FROM Company
WHERE Name LIKE '%keyword%' OR Address LIKE '%keyword%'

我一直在使用实体框架,我尝试了以下方法:context.Companies.Where(x => new string[] { x.Name, x.Address }.Contains(keyword),以及context.Companies.Where(x => new string[] { x.Name, x.Address }.Any(r => r.Contains(keyword)),但都没有成功。第一个给了我一个IN 子句,第二个......我不知道它做了什么,但它没有给我想要的东西。

对不起,我对表达式的理解还不是很深入;我希望我能够从头开始编写自己的自定义表达式,但是从头开始我还不能...有人可以帮助我吗?

【问题讨论】:

    标签: c# sql linq entity-framework linq-to-sql


    【解决方案1】:

    有什么理由不只使用|| 运算符?

    context.Companies.Where(x => x.Name.Contains(keyword) || 
                                 x.Address.Contains(keyword))
    

    我希望这会被翻译成您的原始 SQL。

    【讨论】:

    • 只是为了方便和可读性...我不想要||的完整列表
    • @matt:嗯,有一些方法可以通过编程方式创建这样的表达式(请参阅albahari.com/nutshell/predicatebuilder.aspx) - 但您给出的案例只有两个值,所以我绝对 只需在此处使用||。即使您提供的使用名称和地址创建数组的版本有效,我会说它的可读性远低于我的答案中的代码。如果您问的是具有更多属性或可变数量属性的场景,我会给出不同的答案。
    • 啊...我明白了。好吧,我写这只是为了说明目的,我的对象不仅有两个属性,而且它是一个系统范围的实现(因为我这样做是为了搜索)。我以前看过那个网站,也看到了.Or 东西,但我仍然不明白我将如何使用它来编写可插入到我当前的 LINQ 语句中的东西。我不是要求硬性和快速的代码,但我有点不知道如何开始使用这些表达式......有点像重新学习 C#。
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多