DataTable使用LINQ进行每个单元验证 [英] DataTable each cell validation using LINQ

查看:48
本文介绍了DataTable使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆