枚举没有结果

时间:2014-06-13 06:46:37

标签: vb.net linq

我正在尝试使用grid

中的值插入/更新我的表格

enter image description here

以下是我用于获取网格中productId的代码:

Dim prodId = From row As DataRow _
             In grdSale.Rows _
             Where row.Item(0).ToString <> "" _
             Select row.Item(0)

我正确地获得了productid。以下是获取QTYproductId中的值的代码:

For Each id As Long In prodId

    Dim intpdt As Long
    intpdt = id

    intQty = (From row As DataRow In grdSale.Rows Where _
              row.Item(0).Equals(intpdt) _
              Select row.Item("QTY")).FirstOrDefault()

Next

intQty我得到0,但它应该是1012,正如您在网格中QTY列中看到的那样Enumeration yielded no results 1}})。

哪里错了?

2 个答案:

答案 0 :(得分:1)

尝试这样做,看看你是否得到了预期的结果:

intQty = _
( _
    From row As DataRow In grdSale.Rows Where _
    CLng(row.Item(0)) = intpdt _
    Select CInt(row.Item("QTY")) _
).FirstOrDefault()

答案 1 :(得分:1)

不确定导致问题的原因,但您应该使用Field扩展方法,因为它是强类型的,并且支持可空类型。我也不明白为什么你需要额外的循环和查询来查找每个产品的数量。这应该做到两个:

Dim prodQTYs = From row In grdSale.Rows.Cast(Of DataRow)()
               Let ProductID = row.Field(Of String)("ProductId")
               Let Quantity = row.Field(Of Long)("QTY")
               Where Not String.IsNullOrWhiteSpace(ProductID)
               Select New With {.ProductID = ProductID, .Quantity = Quantity}

将类型更改为适当的类型。

输出:

For Each prodInfo In prodQTYs
    Console.WriteLine("Product:{0} Quantity:{1}", prodInfo.ProductID, prodInfo.Quantity)
Next