LINQ 查询不返回一个应该存在的值

LINQ Query Not Returning one value that should be there

在一段代码中,我有一个 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... }

目前,我已经将消息框设置为 return 过程进行中给我的值。我把所有东西都正确地 return 除了部门,它总是在 MessageBoxes 中显示为空白(所以我假设是 NULL)。所以我的除法计数器不会增加。

如果我把它放到 LINQPad 中,我不确定如何 return 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(),我会得到我的结果,果然,分区通过了。所以所有迹象都表明它很好,但我无法带来我实际需要它出现的价值。想法?谢谢!

P.S。对于那些熟悉 Epicor ERP Division 的人来说是一个 UD 领域,所以它在技术上属于 table ProdGrup_UD,但在 Epicor 中它承认作为 table ProdGrup 就好了,它只是 SQL 让你加入 _UD 到父 table。无论如何,我尝试加入它是为了好玩,但它不喜欢它,因为它知道该专栏已经存在。这样应该没问题。

更新:Rookie Move,没有将 Division 数据上传到测试环境中,所以那里什么也没有,然后检查存在的实时数据,并摸不着头脑想知道为什么它不匹配。但我学到了一些关于 LinqPad 和 Linq 的东西,所以这不是一个无用的练习。

您需要在 Linqpad 中多玩一些以查看发生了什么,将语言设置为 C# 程序,按 F4 并添加对 Server\Bin\Epicor.System.dll 和 Server\Assemblies\Erp 的引用。 Data.910100.dll 并将 app.copnfig 指向您的 Server\web.config 文件。在主块中,使用 var Db = new Erp.ErpContext();

创建自己的 Db 上下文

Linqpad 可以显示复杂的数据结构,因此您不必在上一个示例中完成 FirstOrDefault。例如:

void Main()
{
    var Db = new Erp.ErpContext();

    var sessionCompany = "EPIC06";

    var x = (from hed in Db.OrderHed
             join dtl in Db.OrderDtl
                 on new { hed.Company, hed.OrderNum }
                 equals new { dtl.Company, dtl.OrderNum }
                 into dtlList
             where 
                hed.Company == sessionCompany
             select new { hed, dtlList })

             .Dump();
}

另请注意,在 SQL 中,dbo.ProdGrup 是一个自动生成的视图,它为您连接表 Erp.ProdGrupErp.ProdGrup_UD