[英]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.