需要做搜索

本文关键字:搜索 | 更新日期: 2023-09-27 18:33:43

我有以下查询:

DataTable dtble = dt.AsEnumerable()
                    .Any(row => row.Field<String>("Course") == "Math")
                    .CopyToDataTable();

我希望过滤包含"Math" Course记录。 我尝试使用.Any()但没有用。

澄清一下,如果课程有 12XMath123,我仍然应该返回一条记录,因为它包含"数学"。Usig where 原因将只返回

需要做搜索

它是"数学"的记录,而不是它包含"数学"的记录

尝试使用 Where() 而不是 Any() 。这对我有用:

DataTable dtble = dt.AsEnumerable()
                    .Where(row => row.Field<String>("Course") == "Math")
                    .CopyToDataTable();

根据评论,您可以尝试StartsWith()EndsWith()Contains()。前任:

DataTable dtble = dt.AsEnumerable()
                    .Where(row => row.Field<String>("Course").Contains("Math"))
                    .CopyToDataTable();

在此处查看基本的 Linq 示例。但是您正在寻找 Where,它返回一组与给定谓词匹配的值。Any 返回一个布尔值,指示是否有任何元素与给定谓词匹配。

var dtble = dt.AsEnumerable()
              .Where(row => row.Field<string>("Course") == "Math")
              .CopyToDataTable();
您希望使用

Where 而不是 Any,并且在将字符串与 Linq 进行比较时,更适合使用 .等于方法。您还应该修剪()空格并使用.较低或 .鞋面以获得一致的外壳。

DataTable dtble = dt.AsEnumerable()
                    .Where(row => row.Field<string>("Course")
                    .Trim().Lower().Equals("math")
                    .CopyToDataTable();