繁体   English   中英

检查DataTable值的更有效方法?

[英]More efficient way to check DataTable values?

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

我在下面完成此操作的方式感觉很业余。

bool allRecieved = true;
foreach (DataRow row in SubVwr.Tables[0].Tbl.Rows)
{
    if(row["QtyRcvd"] < row["QtyPer"]) allRecieved = false;
}
if(allRecieved) // execute code

您可以使用LINQ,以提高可读性(假定它们是int -columns):

bool allRecieved = SubVwr.Tables[0].Tbl.AsEnumerable()
    .All(row => row.Field<int>("QtyRcvd") >= row.Field<int>("QtyPer"));

与您当前的循环相比,一个优点是,只要一条记录不符合此条件,此操作就会立即停止。 您的循环将一直持续到结束而不会break

这有点激进,但我将从不使用DataTable开始,而是使用一个简单的模型:

public class SomeType {
    // I'd probably name these QuantityReceived etc, but... meh
    public int QtyRcvd {get;set;}
    public int QtyPer {get;set;}
    // ... etc
}

然后,我可以非常方便地检查属性等。例如,镜像Tim Schmelter的LINQ答案

List<SomeType> someData = ...
var allReceived = someData.All(x => x.QtyRcvd >= x.QtyPer);

因此,现在我们需要的是从数据库中加载SomeType ,这正是ORM和micro-ORM的优势所在。 例如,对于“ Dapper”,这将是:

string region = "North"; // just to show parameter usage
var someData = connection.Query<SomeType>(
    @"select * from SomeTable where Region=@region", new { region }).AsList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM