【问题标题】:Linq query from datasource with where ... like '%%' or ... like '%%'来自数据源的 Linq 查询,其中 ... like '%%' 或 ... like '%%'
【发布时间】:2018-11-16 09:43:18
【问题描述】:

我正在尝试从包含列表中包含的任何字符串的数据库中选择所有字段(可以从用户那里填充)。 对我来说很容易用纯 SQL 用一句话来做

WHERE myfield LIKE '%nam%' OR myfield LIKE '%cod%' OR myfield LIKE '%big%'

但我需要使用 C# 和 Linq 来完成。我搜索了几个解决方案,其中一些建议我使用 .Any 或 .Contains 但我不知道如何应用于我的案例:-(

这是我能达到的最接近的结果:

var query = DataSource.Docs();

...

IList<string> nameFilter = new List<string>() {"nam", "cod", "big"};                    
query = query.Where(x => x.NomeFile.Contains(nameFilter.FirstOrDefault()));

无论如何,使用这个愚蠢的代码,我只过滤包含我列表的第一个元素的元素(FirstOrDefault 让忽略所有其他元素)

谁能帮我找到正确的方法?

【问题讨论】:

    标签: c# database linq select filter


    【解决方案1】:

    您正在寻找:

    query.Where(x => nameFilter.Any(s => x.NomeFile.Contains(s)));
    

    【讨论】:

    • 我的工作就像一个魅力!谢谢!我尝试了 Any 和 Contains 的组合,但我完全错过了顺序。
    【解决方案2】:

    你试过了吗? query = query.Where(x => nameFilter.Any(n => x.NomeFile.Contains(n))); 要么 query = query.Where(x => nameFilter.Any(n => x.NomeFile.IndexOf(n) >= 0));

    【讨论】:

    • 这实际上与其他发布的答案没有什么不同。
    • 谢谢你迈克尔!
    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多