需要做搜索

时间:2013-10-03 17:45:37

标签: c# linq

我有以下查询:

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

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

澄清一下,如果课程有12XMath123,我仍然应该返回一条包含“数学”的记录。 Usig Where cause仅返回“Math”的记录而不是“Math”

的记录

3 个答案:

答案 0 :(得分:3)

尝试使用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();

答案 1 :(得分:1)

Look here了解Linq的基本示例。但是你正在寻找Where,它返回一组与给定谓词匹配的值。 Any返回一个bool,指示是否有任何元素与给定的谓词匹配。

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

答案 2 :(得分:0)

您希望使用Where而不是Any,并且在将字符串与Linq进行比较时,您更适合使用.Equals方法。你还应该修剪()空格并使用.Lower或.Upper来获得一致的套管。

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