更有效的方法来检查DataTable值?

时间:2018-03-14 14:21:30

标签: 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

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ,以获得更好的可读性(假设它们是int - 列):

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

优于当前循环的一个优点是,只要一条记录与此条件不匹配,这将停止。您的循环将一直持续到没有break结束。

答案 1 :(得分:1)

这有点激进,但我从 开始不使用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's LINQ answer

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

所以现在我们所需要的是从DB加载SomeType,这是ORM和微ORM优于的地方。例如,使用&#34; Dapper&#34;,这将是:

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