【问题标题】:foreach in foreach list c#foreach 列表中的 foreach c#
【发布时间】:2022-01-07 08:46:36
【问题描述】:

GalleryDetail.Id 进入第一个foreach 循环时为148GalleryDetail.Id 进入第二个foreach 循环时为148。但它不会再次进入第一个foreach 循环。它从第二个继续。如何让它重新进入这里的第一个循环?

注意:我没有来自 GalleryDetail.Id 请求的直接访问权限。

var detailList = await _repo.GalleryDetail.GetAllAsync();

foreach (var item in mapped.GalleryDetails)
{
    foreach (var item2 in detailList)
    {
        if (item.Id != item2.Id)
        {
            var mapped3 = _mapper.Map<GalleryDetails>(item2);
            await _repo.GalleryDetail.DeleteAsync(mapped3);
        }
    }
}

【问题讨论】:

  • 你能澄清一下mapped.GalleryDetails在这种情况下是什么吗?
  • 现在你有了一个嵌套循环。您想并行使用它们(每个集合中的一个元素)吗?
  • mapped.GalleryDetails => 这是我发送的请求中的 GalleryDetail 模型列表。
  • 同意@Korfu 进行更多说明。还有DetilList有多大?什么版本的EF?也许用英语带我们完成您想要实现的目标。尽管我很喜欢 LINQ,但到目前为止,我的直觉是我会像你所做的那样坚持使用 foreach,但要真正澄清你在做什么。这将使您将来(或其他开发人员)更容易回来
  • 有了我认可的答案,我的大部分问题都解决了。由于我只使用Ef Core,所以我写了一个新的foreach方法以列表的形式删除。

标签: c# foreach


【解决方案1】:

这里不需要使用 2 循环,你可以使用 LinQ 代替。而且您不应该将异步删除留在 foreach 循环中,因为它会多次连接到您的数据库。示例:

var detailList = await _repo.GalleryDetail.GetAllAsync();
//Map the whole list
var detailListMapped = _mapper.Map<List<GalleryDetails>>(detailList);
//Use LinQ to find database items not in request
var deletedList = detailListMapped.Where(x => !mapped.GalleryDetails.Any(y => y.Id == x.Id)).ToList();
//Entity Framework have RemoveRange function, you should use it here
await _repo.GalleryDetail.RemoveRangeAsync(deletedList );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多