如何在 linq 查询 c# 中的 WHERE 语句后嵌入动态 OR 条件

Posted

技术标签:

【中文标题】如何在 linq 查询 c# 中的 WHERE 语句后嵌入动态 OR 条件【英文标题】:How to embed dynamic OR condition after WHERE statement in linq query c# 【发布时间】:2021-12-02 14:58:33 【问题描述】:

我有一个这样的 LINQ 查询:

    var getOnlyMP = from mpPoint in cmList where 
    mpPoint.Component.Contains("asd") || 
    mpPoint.Component.Contains("dsa") || 
    mpPoint.Component.Contains("123") || 
    mpPoint.Component.Contains("456")                                            
    select new MP
    
        MPName = mpPoint.Component,
        X = mpPoint.PlaceX,
        Y = mpPoint.PlaceY,                                 
    ;

我想将“asd”、“dsa”、“123”、“456”存储在一个数组中,那么是否有可能在该数组上循环并动态比较 WHERE 子句之后的所有项目?

【问题讨论】:

【参考方案1】:

您可以将.Any() 与数组一起使用,

var expectedStrings = new string[] "asd", "dsa", "123", "456";

var getOnlyMP = cmList.Where(mpPoint=> 
        expectedStrings.Any(x => mpPoint.Component.Contains(x)))
        .Select(x => new MP
                
                   MPName = x.Component,
                   X = x.PlaceX,
                   Y = x.PlaceY,                                 
                );

在查询表单中,

var expectedStrings = new string[] "asd", "dsa", "123", "456";
var getOnlyMP = from mpPoint in cmList where 
   expectedStrings.Any(x => mpPoint.Component.Contains(x)))             
   select new MP
   
      MPName = mpPoint.Component,
      X = mpPoint.PlaceX,
      Y = mpPoint.PlaceY,                                 
   ;

【讨论】:

@dba,我的愚蠢错误。我已修复它,请查看更新的答案并感谢您的评论 我确定,这只是一个错字,但我无法编辑,因此评论:-)

以上是关于如何在 linq 查询 c# 中的 WHERE 语句后嵌入动态 OR 条件的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用带有 where 子句的 Linq 查询作为 dataTable 上的变量

使用 C# 中的 NEST 库调用 elasticsearch 时,如何向 linq 语句添加条件逻辑?

C#图解教程 第十九章 LINQ

C# linq 查询,每个属性的 where 子查询

LINQ 查询在 C# 中使用实体框架获取单列和单行值而不使用 Where

C# 在 Linq 查询 WHERE 语句中返回两个纬度/经度坐标之间的计算距离