DataTable.Select where子句中的字符串函数

时间:2013-10-10 07:27:21

标签: c# sql datatable

我遇到DataTable.Select()的问题,其中匹配值可能包含前导空格,需要正确修剪以返回正确数量的记录。

目前我的代码返回的记录较少,因为匹配因不需要的字符而失败。

如何处理DataTable.Select,如下面的SQL示例所示?

SELECT * FROM Table WHERE LTRIM(FullName) = ' Joe Smith'

我试过

dataTable.Select("LTRIM(FullName) = ' Joe Smith'");

但失败了。

有什么想法吗?

3 个答案:

答案 0 :(得分:17)

我建议使用Linq-To-DataSet代替它,它会使它更清晰,更容易维护:

var rows = from row in dataTable.AsEnumerable()
           where row.Field<string>("FullName").Trim() == "Joe Smith"
           select row;

如果您想使用LTRIM,则只需将Trim替换为TrimStart

如果您需要数组或列表,请使用ToArrayToList,例如

DataRow[] rowsArray = rows.ToArray();

或DataTable

dataTable = rows.CopyToDataTable();

修改:如果您坚持使用DataTable.Select或者您无法使用linq,这应该有效(LTRIM is not supported):

rowsArray = dataTable.Select("TRIM(FullName) = 'Joe Smith'");

答案 1 :(得分:3)

尝试一下:

string searchTerm = " Joe Smith";
string expression = String.Format("TRIM(FullName) = '{0}'", searchTerm.Trim());
dataTable.Select(expression);

答案 2 :(得分:0)

DataTable excelData = objGetExcelData.DataExcel(objEntities.StrFilePath, ConfigSettings.GetAppConfigValue("select * from sheet1"));

StringBuilder strInput = new StringBuilder();
DataView view = new DataView(excelData); 
DataTable distinctValues = view.ToTable(true, "GROUP_NAME"); 
if (distinctValues.Rows.Count > 0)
{
      for (int i = 0; i < distinctValues.Rows.Count; i++)
      {
           strGroupName = Convert.ToString(distinctValues.Rows[i]["GROUP_NAME"]);
           foreach (DataRow item in excelData.Select("GROUP_NAME = '" + strGroupName + "'"))
           {
               strInput.Append(Convert.ToString(item[0]));
               strInput.Append("~");
               strInput.Append(Convert.ToString(item[1]));
               strInput.Append(",");
               strDasID = Convert.ToString(item[0]);
            }
      }
}