【发布时间】:2017-02-15 02:07:29
【问题描述】:
在一段代码中,我有一个 Foreach 用于运行和计算数据库中可能存在或不存在的特定部分。基本上,对于订单上的每个部分,我会继续计算所属的产品组,然后计算这些产品组所属的部门。为此,我使用了这个 LINQ 查询:
foreach (var OrderDtl_yRow in ( from ThisOrderDtl in Db.OrderDtl
join ThisProdGrup in Db.ProdGrup on
ThisOrderDtl.ProdCode equals ThisProdGrup.ProdCode
where
ThisOrderDtl.Company == Session.CompanyID &&
ThisOrderDtl.OrderNum == 195792
select new
{
ProdCode = ThisOrderDtl.ProdCode,
Division = ThisProdGrup.Division_c,
OrderNum = ThisOrderDtl.OrderNum,
OrderLine = ThisOrderDtl.OrderLine
}))
{ ....counting things... }
目前我已经设置了消息框,以便在进程进行时将值返回给我。除了除法之外,我得到了正确返回的所有内容,它在 MessageBoxes 中始终显示为空白(所以我假设为 NULL)。所以我的除法计数器不会增加。
如果我把它放到 LINQPad 中,我不确定如何返回 foreach 的结果,但我用
进行了尝试if(OrderDtl_yRow.Division != null && OrderDtl_yRow.Division != "")
{i++;}
i.Dump();
得到了 5 行(我预计有 5 行,所以我至少在拉动我们的东西)。然后我将其转换为更简单的 FirstOrDefault 语句来测试单个值,例如
var OrderDtl_yRow = ( from ThisOrderDtl in OrderDtl
join ThisProdGrup in ProdGrup on
ThisOrderDtl.ProdCode equals ThisProdGrup.ProdCode
where
ThisOrderDtl.OrderNum == 195792 &&
ThisOrderDtl.OrderLine == 1
select new
{
ProdCode = ThisOrderDtl.ProdCode,
Division = ThisProdGrup.Division_c,
OrderNum = ThisOrderDtl.OrderNum,
OrderLine = ThisOrderDtl.OrderLine
}).FirstOrDefault();
然后,如果我执行 OrderDtl_yRow.Dump() 我得到我的结果,果然,除法通过。所以所有迹象都表明它很好,但我无法在我真正需要它出现的地方带来价值。想法?谢谢!
附:对于熟悉 Epicor ERP Division 的人来说,是一个 UD 字段,所以它在技术上属于表 ProdGrup_UD,但在 Epicor 中,它认识到作为表 ProdGrup 就好了,它唯一的 SQL 使您将 _UD 连接到父表。无论如何,我尝试加入它以获得乐趣,但它不喜欢它,因为它知道该列已经存在。所以应该没问题。
更新:Rookie Move,没有将 Division 数据上传到测试环境中,所以那里什么也没有,然后检查了它存在的 Live 数据,并摸不着头脑,为什么它不匹配。但是我学到了一些关于 LinqPad 和 Linq 的知识,所以这不是一个无用的练习。
【问题讨论】: