DataTable使用LINQ进行每个单元验证 [英] DataTable each cell validation using LINQ
问题描述
我有一个DataTable,我需要验证每个数据单元的数据类型。现有代码如下所示。
I have a DataTable and I need to validate each data cell for its datatype. The existing code is as written below.
foreach(dt.Rows中的DataRow行)
              {
                  bool validateDataRow = true;
                  DataRow newRow = dtTemplate.NewRow();
                  newRow [" RowNumber"] = rowNo;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; for(int colNo = 0; colNo< colCount; colNo ++)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(!row.IsNull(colNo)&& row.ItemArray [colNo] .ToString()!="")
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; newRow [colNo] = Convert.ChangeType(row [colNo],dtTemplate.Columns [colNo] .DataType);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;抓住
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; validateDataRow = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则if(AllowNulls)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(!dtTemplate.Columns [colNo] .AllowDBNull)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(dtTemplate.Columns [colNo] .DataType == typeof(string))
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; newRow [colNo] ="" ;;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; validateDataRow = false;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
foreach (DataRow row in dt.Rows)
{
bool validateDataRow = true;
DataRow newRow = dtTemplate.NewRow();
newRow["RowNumber"] = rowNo;
for (int colNo = 0; colNo < colCount; colNo++)
{
if (!row.IsNull(colNo) && row.ItemArray[colNo].ToString() != "")
{
try
{
newRow[colNo] = Convert.ChangeType(row[colNo], dtTemplate.Columns[colNo].DataType);
}
catch
{
validateDataRow = false;
}
}
else if (AllowNulls)
{
if (!dtTemplate.Columns[colNo].AllowDBNull)
{
if (dtTemplate.Columns[colNo].DataType == typeof(string))
newRow[colNo] = "";
else
{
validateDataRow = false;
}
}
}
}
但这种方法需要很长时间,因为我正在获取页面等消息。我想用LINQ(或任何更好的方法)重写这个逻辑。有人可以帮我这个吗?
But this approach is taking very long time due to which I'm getting page wait message. I want to rewrite this logic using LINQ(or any better approach). Can someone help me with this?
提前致谢,
Ravi
推荐答案
您好ravi534,
Hi ravi534,
根据您的描述,你想要有效的数据表的每个字段和单元格。据我所知,LINQ无法提高性能。如果你想使用Linq,请参考以下代码:
According to your description, you want to valid every field cell of datatable. As far as I know, LINQ could not increase the performance. If you want to use Linq, please refer the following code:
var result = from p in dt.AsEnumerable()
select p;
foreach (var row in result)
{
bool validateDataRow = true;
DataRow newRow = dtTemplate.NewRow();
newRow["RowNumber"] = rowNo;
for (int colNo = 0; colNo < colCount; colNo++)
{
if (!row.IsNull(colNo) && row.ItemArray[colNo].ToString() != "")
{
try
{
newRow[colNo] = Convert.ChangeType(row[colNo], dtTemplate.Columns[colNo].DataType);
}
catch
{
validateDataRow = false;
}
}
else if (AllowNulls)
{
if (!dtTemplate.Columns[colNo].AllowDBNull)
{
if (dtTemplate.Columns[colNo].DataType == typeof(string))
newRow[colNo] = "";
else
{
validateDataRow = false;
}
}
}
}
}
祝你好运,
Cole Wu
这篇关于DataTable使用LINQ进行每个单元验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!