【问题标题】:c# DataTable select not working with special characters #c# DataTable 选择不使用特殊字符#
【发布时间】:2010-12-27 17:15:37
【问题描述】:

我有一个数据表选择,例如:

productData.Select("Name = 'AAA BBB # CCC'");

我知道该条目在那里,它只是因为 # 字符而不起作用。我试过用 [] 转义:

productData.Select("Name = 'AAA BBB [#] CCC'");

但它仍然不起作用。我知道对于单引号,我将它们加倍,所以'变成''。但是我还需要关注哪些其他角色以及如何让这个案例发挥作用。

【问题讨论】:

    标签: c# datatable datatable.select


    【解决方案1】:

    你绝对使用这样的数据表吗?正是出于这个原因,我一直对 DataTable 中基于文本的查询感到非常紧张。

    如果可能,我建议您开始使用 LINQ。您已经可以使用DataTable 来做到这一点,例如

    var query = products.AsEnumerable()
                        .Where(row => row.Field<string>("Name") == "AAA BBB # CCC");
    

    这样你就不必担心转义等问题。如果你使用强类型数据集,它会变得更加简单,因为你可以直接引用属性而不是使用字符串名称。

    【讨论】:

    • 我没有强类型数据集。仅仅为了转换,转换为 Enumerable 不会涉及循环所有行(内部)至少一次吗?正如您所建议的那样,它受到性能损失的可能性较小。否则你不会建议的。但我相信你的回答会增加我的知识。
    • @Ismail:它不需要转换任何东西 - 这只是返回一个IEnumerable&lt;DataRow&gt;,并且 DataTable 已经包含行。
    • 非常感谢您的宝贵时间和回复。我查看了EnumerableRowCollection&lt;TRow&gt; 的构造函数(将输入作为DataTable 的构造函数),因为最终在DataTable 实例上调用.AsEnumerable() 时被调用。我发现它调用了DataTable.Rows.Cast&lt;TRow&gt;(),它返回IEnumerable&lt;DataRow&gt;。所以调用products.AsEnumerable() 和调用products.Rows.Cast&lt;DataRow&gt;() 一样好。我现在明白了。再次感谢。
    【解决方案2】:

    你尝试过这样的事情吗?

    productData.Select(@"Name = 'AAA BBB # CCC'");
    

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2016-09-04
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多