我遇到DataTable.Select()
的问题,其中匹配值可能包含前导空格,需要正确修剪以返回正确数量的记录。
目前我的代码返回的记录较少,因为匹配因不需要的字符而失败。
如何处理DataTable.Select,如下面的SQL示例所示?
SELECT * FROM Table WHERE LTRIM(FullName) = ' Joe Smith'
我试过
dataTable.Select("LTRIM(FullName) = ' Joe Smith'");
但失败了。
有什么想法吗?
答案 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
。
如果您需要数组或列表,请使用ToArray
或ToList
,例如
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]);
}
}
}