LINQ-如何对过滤数据集的所有列求和

时间:2018-11-09 16:44:34

标签: c# linq

我有一个包含库存清单的数据集,我正在尝试返回用户选择的物品的数量。

可以说这是数据库结构:

ItemName    Quantity    CheckedOut

MiniPC      4           False
MiniPC      1           False

为此,我尝试使用LINQ,但是到目前为止,我只能返回数据库中列出的特定名称的项目或第一个数量字段的次数。

第一个查询是:

 var itemQtyInStock = from myRow in stockdTc.AsEnumerable()
                                         where (myRow.Field<string>("ItemName").ToUpper() == itemNameToSearch) && (myRow.Field<bool>("CheckedOut") == false)
                                         select myRow;

这将返回:2

第二个查询是:

var itemQtyInStockTotal = Convert.ToInt32(from myRow in stockdTc.AsEnumerable()
                                                              where (myRow.Field<string>("ItemName").ToUpper() == itemNameToSearch) && (myRow.Field<bool>("CheckedOut") == false)
                                                              select myRow.Field<string>("Quantity"));

这将返回:4

两个查询都不对,因为它应该返回:5

我如何总结所有数量字段?

编辑:

这是任何想要的答案:

 var itemQtyInStockTotal = stockdTc.AsEnumerable().Where(myRow => (myRow.Field<string>("ItemName").ToUpper() == itemNameToSearch) && (myRow.Field<bool>("CheckedOut") == false)).Sum(myRow => Convert.ToInt32((string)myRow["Quantity"]));

1 个答案:

答案 0 :(得分:3)

您可以这样做:

var sum = stockTc
    .AsEnumerable()
    .Where(x=> // your filters)
    .Sum(x => (int) x["Quantity"]);