Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查数据表值的更有效方法?_C#_Datatable - Fatal编程技术网

C# 检查数据表值的更有效方法?

C# 检查数据表值的更有效方法?,c#,datatable,C#,Datatable,我想遍历我的表,检查收到的数量是否高于每行的预期数量,如果是,则执行一些代码 我在下面做这件事的方式感觉很业余 bool allRecieved = true; foreach (DataRow row in SubVwr.Tables[0].Tbl.Rows) { if(row["QtyRcvd"] < row["QtyPer"]) allRecieved = false; } if(allRecieved) // execute code bool allreceived=t

我想遍历我的表,检查收到的数量是否高于每行的预期数量,如果是,则执行一些代码

我在下面做这件事的方式感觉很业余

bool allRecieved = true;
foreach (DataRow row in SubVwr.Tables[0].Tbl.Rows)
{
    if(row["QtyRcvd"] < row["QtyPer"]) allRecieved = false;
}
if(allRecieved) // execute code
bool allreceived=true;
foreach(子vwr.Tables[0].Tbl.Rows中的DataRow行)
{
如果(行[“QtyRcvd”]<行[“QtyPer”])全部接收=false;
}
if(allreceived)//执行代码

为了更好的可读性,您可以使用LINQ(假定这些是
int
-columns):

bool allreceived=SubVwr.Tables[0].Tbl.AsEnumerable()
.All(行=>行字段(“QtyRcvd”)>=行字段(“QtyPer”);

与当前循环相比的一个优势是,一旦一条记录与此条件不匹配,此循环就会停止。您的循环将一直持续到结束而不中断
break

为了更好的可读性,您可以使用LINQ(假定这些是
int
-列):

bool allreceived=SubVwr.Tables[0].Tbl.AsEnumerable()
.All(行=>行字段(“QtyRcvd”)>=行字段(“QtyPer”);

与当前循环相比的一个优势是,一旦一条记录与此条件不匹配,此循环就会停止。您的循环将一直持续到结束,而不会中断。这有点激进,但我首先不使用数据表,而是使用一个简单的模型:

public class SomeType {
    // I'd probably name these QuantityReceived etc, but... meh
    public int QtyRcvd {get;set;}
    public int QtyPer {get;set;}
    // ... etc
}
然后我可以非常方便地检查属性等。例如,镜像:


这有点激进,但我首先不使用
DataTable
,而是使用一个简单的模型:

public class SomeType {
    // I'd probably name these QuantityReceived etc, but... meh
    public int QtyRcvd {get;set;}
    public int QtyPer {get;set;}
    // ... etc
}
然后我可以非常方便地检查属性等。例如,镜像:


一旦发现故障,立即中断循环;不需要迭代整个表。首先要挑战的是:为什么需要使用
DataTable
?在几乎所有情况下,当我看到
DataTable
时,它都被不恰当地使用,而非
DataTable
方法将更高效、更方便地工作。对于
DataTable
,有合法的良好用例,但它们不应该是默认用例,如果您知道它的成员(
QtyRcvd
/
QtyPer
),那么几乎可以肯定,一旦您发现故障,它就不是从循环中泄漏出来的用例之一;不需要迭代整个表。首先要挑战的是:为什么需要使用
DataTable
?在几乎所有情况下,当我看到
DataTable
时,它都被不恰当地使用,而非
DataTable
方法将更高效、更方便地工作。对于
DataTable
,存在合法的良好用例,但它们不应该是默认用例,如果您知道它的成员(
QtyRcvd
/
QtyPer
),那么几乎可以肯定它不是这些用例之一
List<SomeType> someData = ...
var allReceived = someData.All(x => x.QtyRcvd >= x.QtyPer);
string region = "North"; // just to show parameter usage
var someData = connection.Query<SomeType>(
    @"select * from SomeTable where Region=@region", new { region }).AsList();