我想遍历我的表,检查收到的数量是否高于每行的预期数量,如果是,则执行一些代码。
我在下面这样做的方式感觉很业余。
bool allRecieved = true;
foreach (DataRow row in SubVwr.Tables[0].Tbl.Rows)
{
if(row["QtyRcvd"] < row["QtyPer"]) allRecieved = false;
}
if(allRecieved) // execute code
答案 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();