我不;t来初始化foreach循环中的变量.任何其他可能的逻辑

本文关键字:任何 变量 其他 初始化 循环 foreach 我不 | 更新日期: 2023-09-27 18:21:55

如果存在任何关于GoDownRent的记录,我想与其他表关联,如果没有,则根据它完成列表,但问题是我从不想在foreach循环中初始化var(因为我想避免它是有原因的),但我最终得到了这段代码。

代码:

    private CargoEntities context = new CargoEntities();
    public ActionResult Section82List()
    {
        List<IMPORTAWB> _listOfAWB = context.IMPORTAWBs.ToList();
        List<IMPORTAWB> _finalizedListForView = new List<IMPORTAWB>();
        foreach (var item in _listOfAWB)
        {
            var _GodDownRent = context.GODOWNRENTs.Where(f => f.AWBNO == item.AWBNO).FirstOrDefault();
            if (_GodDownRent == null)
            {
                _finalizedListForView.Add(item);
            }
        }

        return View(_finalizedListForView);
    }

任何其他逻辑都将受到赞赏,因为它将在代码中初始化10kvar。我想用更好的逻辑来避免它。

我不;t来初始化foreach循环中的变量.任何其他可能的逻辑

您可以在单个联接查询中获得没有相应租金实体的项目:

var finalizedListForView =
    from i in context.IMPORTAWBs
    join r in context.GODOWNRENTs
      on i.AWBNO equals r.AWBNO into g
    where !g.Any()
    select i;

所有工作都将在服务器端完成,而不是加载IMPORTAWBs表的所有内容,然后对该表中的每个项目进行额外查询。生成的查询看起来像:

SELECT
    [Extent1].[AWBNO] AS [AWBNO],
    [Extent1].[Foo] AS [Foo]
    [Extent1].[Bar] AS [Bar]
    FROM [dbo].[IMPORTAWBs] AS [Extent1]
    WHERE  NOT EXISTS (SELECT
        1 AS [C1]
        FROM [dbo].[GODOWNRENTs] AS [Extent2]
        WHERE [Extent1].[AWBNO] = [Extent2].[AWBNO]
    )

Lambda语法不是那么漂亮,但您可以很好地在这里使用ToList()运算符,并避免任何局部变量:

return context.IMPORTAWBs
         .GroupJoin(context.GODOWNRENTs,
                    i => i.AWBNO, r => r.AWBNO, (item, rents) => new { item, rents })
         .Where(x => !x.rents.Any())
         .Select(x => x.item)
         .ToList();