2013-10-03 62 views
1

我有以下查询:需要做搜索

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

我想被过滤,其中含有Course"Math"记录。我试图使用.Any(),但它没有奏效。

为了澄清,如果课程有12XMath123我仍然应该返回一条记录,因为它包含“数学”。 Usig的Where原因将只返回记录,它是“数学”,而不是它包含“数学”

+0

With.Any()你找出是否有满足您的条件 – Lucas

回答

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(); 
+0

卡夫,我喜欢它在哪里课程包含“数学”,这意味着它可以像“Math123”,它不会被返回上述内容。 –

+0

谢谢卡夫,但如果它像1123Math122会发生什么情况。我仍然需要它来返回一个值 –

+0

最好是为你的情况包含()。答案已更新。如果您正在独立搜索案例,您可以考虑将“字段值和文本”更改为同一个案例。 – Kaf

1

Look here对于基本的Linq示例。但是你正在寻找Where,它返回一组匹配给定谓词的值。任何返回一个布尔值,指示任何元素是否匹配给定的谓词。

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

你以为Where'的'一个或多个元素。 'Select'将会执行一个投影,并且最终会包含所有'bool'。 –

+0

谢谢!你是对的。 –

0

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

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