LINQ无法识别select子句中的连接表

时间:2015-12-11 17:53:35

标签: c# linq syntax-error

我将预期记录连接到返回的集合,尝试以确定预期列是否已正确更新。要更新的列由预期行中的字符串确定。

问题:我有一个编译错误,我不明白。

  

无法解析符号dbRow

(在QtyUpdated字段中以**加粗/括号)。

var x = from addRow in expected.AsEnumerable()
        join dbRow in dtDB.AsEnumerable() 
        on  
            new { key1= addRow[0], key2=addRow[1] ,key3=addRow[3] }
        equals 
            new { key1=dbRow["TransactionID"], 
                  key2=dbRow["TransactionItemID"],
                  key3=dbRow["DeliverDate"]
            } 
        into result
        from r in result.DefaultIfEmpty()
        select new {TID = addRow[0], ItemID = addRow[1], DeliveryDate= addRow[3], 
            QtyUpdated= (
                addRow[6].ToString() == "Estimated" ? **dbRow**["EstimatedQuantity"] == (decimal)addRow[5] :
                addRow[6].ToString() == "Scheduled" ? **dbRow**["ScheduledQuantity"]==(decimal)addRow[5] :
                addRow[6].ToString() == "Actual" ? **dbRow**["ActualQuantity"]== (decimal)addRow[5] : false)
        };

我知道这看起来很糟糕,它是Q / A的工具,可以测试我们API中的Add函数是否真的有用。

1 个答案:

答案 0 :(得分:3)

是的,dbRow仅在联接的equals部分范围内。但是,您没有使用r范围变量 - 其中包含当前addRow ...或null的匹配行。

只需将dbRow中的每个select更改为r即可。但是当不是任何匹配的行时,请确定您想要发生的事情,因此r为空。