我有以下查询:
DataTable dtble = dt.AsEnumerable()
.Any(row => row.Field<String>("Course") == "Math")
.CopyToDataTable();
我希望在Course
包含"Math"
的位置过滤记录。我尝试使用.Any()
但它没有用。
澄清一下,如果课程有12XMath123,我仍然应该返回一条包含“数学”的记录。 Usig Where cause仅返回“Math”的记录而不是“Math”
的记录答案 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();