1

我有以下查询:

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

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

澄清一下,如果 Course 有 12XMath123 我仍然应该返回一条记录,因为它包含“数学”。使用 Where 原因将仅返回“数学”而不是包含“数学”的记录

4

3 回答 3

3

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

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

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

DataTable dtble = dt.AsEnumerable()
                    .Where(row => row.Field<String>("Course").Contains("Math"))
                    .CopyToDataTable();
于 2013-10-03T17:52:02.130 回答
1

Look here for basic Linq examples. But you're looking for Where, which returns a group of values that match the given predicate. Any returns a bool indicating whether any elements match a given predicate.

var dtble = dt.AsEnumerable()
              .Where(row => row.Field<string>("Course") == "Math")
              .CopyToDataTable();
于 2013-10-03T17:48:21.113 回答
0

您想使用 Where 而不是 Any,并且在使用 Linq 比较字符串时,您更适合使用 .Equals 方法。您还应该 Trim() 空格并使用 .Lower 或 .Upper 来获得一致的大小写。

DataTable dtble = dt.AsEnumerable()
                    .Where(row => row.Field<string>("Course")
                    .Trim().Lower().Equals("math")
                    .CopyToDataTable();
于 2013-10-03T17:55:47.323 回答