4

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

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

您如何处理 DataTable.Select 下面的示例 SQL 建议?

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

我试过了

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

但它失败了。

有任何想法吗?

4

3 回答 3

18

我建议Linq-To-DataSet改用它,它使它更清晰,更易于维护:

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

如果要LTRIM改用,只需替换TrimTrimStart.

如果您想要一个数组或列表,请使用ToArrayor ToList,例如

DataRow[] rowsArray = rows.ToArray();

或数据表

dataTable = rows.CopyToDataTable();

编辑:如果您坚持使用DataTable.Select或不能使用 linq,这应该可以工作(LTRIM 不支持):

rowsArray = dataTable.Select("TRIM(FullName) = 'Joe Smith'");
于 2013-10-10T07:32:07.100 回答
3

试试这个:

string searchTerm = " Joe Smith";
string expression = String.Format("TRIM(FullName) = '{0}'", searchTerm.Trim());
dataTable.Select(expression);
于 2013-10-10T07:39:05.487 回答
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]);
            }
      }
}
于 2015-06-23T13:34:13.833 回答