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

本文关键字:子句 识别 select LINQ | 更新日期: 2023-09-27 18:26:24

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

问题:我有一个无法理解的编译错误。

无法解析符号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函数是否有效的工具。

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

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

只需将select中的每个dbRow更改为r即可。但是,当没有任何匹配的行,因此r为空时,请计算出您希望发生什么。