日期:2014-05-19  浏览次数:20507 次

|M| DataTable.Select问题,我想对查询的文字进行格式化要怎么办
private   void   GetRowsByFilter()
{
        DataTable   table   =   DataSet1.Tables[ "Orders "];
        //   Presuming   the   DataTable   has   a   column   named   Date.
        string   expression;
        expression   =   "Date   >   '1/1/00 ' ";
        DataRow[]   foundRows;

        //   Use   the   Select   method   to   find   all   rows   matching   the   filter.
        foundRows   =   table.Select(expression);

        //   Print   column   0   of   each   returned   row.
        for(int   i   =   0;   i   <   foundRows.Length;   i   ++)
        {
                Console.WriteLine(foundRows[i][0]);
        }
}
上面是我装的MSDN   Select   的示例
expression   =   "Date   >   '1/1/00 ' ";
这一行我的要更改为
expression   =   "name   like   '%zg% ' ";

但因为我的Table里面的name都是中文啊这里的 "zg "要可以Select   出"中国"
转换参考http://community.csdn.net/Expert/topic/5409/5409486.xml?temp=6.995791E-02幕白兄的代码

我现在想的办法是
将我的dt1用循环的办法判断行里的name转成字母再用indexof判断是否不为-1
如果不为-1就添加到新的dt2
后再绑定dt2

我想问的是我上面的办法可不可以
有没有更好的
谢谢



------解决方案--------------------
这种完整性的问题,最直接的办法是在数据库中增加国家名称的字段
要么就在数据访问层进行数据存储时做转换,如:
/// <summary>
/// 转换Boolean数据类型
/// </summary>
/// <param name= "value "> 转换的值 </param>
/// <returns> </returns>
public static String OraBit(Boolean value)
{
if (value)
return "Y ";
else
return "N ";
}

/// <summary>
/// 转换Boolean数据类型
/// </summary>
/// <param name= "value "> 转换的值 </param>
/// <returns> </returns>
public static Boolean OraBool(String value)
{
if (value.Equals( "Y "))
return true;
else
return false;
}
------解决方案--------------------
记忆中多个Datatable之间是可以关联查询的,你可以从这方面试试。
另外对处理一下条件字符串应该是正道
------解决方案--------------------
sql把name列取中文首字母..
------解决方案--------------------
expression = "name like '%中国% ' ";
DataRow[] dr1 = new DataRow();

dr1 = dt1.Select(expression);

DataSet ds1=new DataSet();
ds1.meg..(dr1);
ds.dispose();

现在就可以用ds1.Tables[0]......了

------解决方案--------------------
如果要转换中文和字母,那你最好弄一个表,先对应DT1替换一下,然后再用上面的方法就OK了

------解决方案--------------------
CREATE FUNCTION f_GetPY(@str nvarchar(4000))