我不;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。我想用更好的逻辑来避免它。
您可以在单个联接查询中获得没有相应租金实体的项目:
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();