【问题标题】:LINQ Select n list ASP.NET CoreLINQ 选择 n 列表 ASP.NET Core
【发布时间】:2021-10-20 22:56:58
【问题描述】:

我有这个代码:

foreach(var i in category.count)
{
    var getDifferentSerialNumberforEachLoop = _db.Category.Where(a => a.CategoryID == 
    categoryID).Select(i=>i.SerialNumber).FirstOrDefault();

 //Proceed to do something else with the first serial number value
  .....
 ///end of the first serial number being processed, do again n times (number of categry.count 
 times)
}

所以你有一个CategoryID可以有许多与之关联的序列号的情况, 示例:

CategoryID     SerialNumber
12345          0123445
12345          2345678
12345          0987654
12345          8756478
....           ......(n times)
                          

我想循环并获取每个序列号并保存到变量“getDifferentSerialNumberforEachLoop”进程中,然后对与该 CategoryID 关联的所有序列号再次执行此操作。但目前我只得到第一个 SerialNumber 说 0123445 当然这是因为我使用的是 'FirstOrDefault()' 所以即使 Select(i=>i.SerialNumber) 值在每次循环遍历类别时都会发生变化。计算变量,getDifferentSerialNumberforEachLoop 将始终是第一个或默认值。

我的问题是:如何使 getDifferentSerialNumberforEachLoop 始终具有下一个 SerialNumber 值?

我不能使用.Take(4),因为我不知道category.count 是否总是4 - 如果这样有意义吗?

不能使用LastOrDefault,因为我不会得到第一个到最后一个值,我不能使用List(),因为我一次只想要一个SerialNumber 值。

那么有什么办法可以解决这个问题吗?我也看过 Takewhile 但不确定?请问我可以使用其他任何查询吗?谢谢。

【问题讨论】:

  • 您可以获取序列号列表(与您正在迭代的任何其他内容相结合),然后对组合列表进行迭代?
  • 怎么样?这样做, var getDifferentSerialNumberforEachLoop = _db.Category.Where(a => a.CategoryID == categoryID).Select(i=>i.SerialNumber).List();将返回所有序列号的列表,但我一次只想要一个?
  • 不是最好的解决方案,但可能使用 ToList() 并在该列表上进行嵌套迭代 var listOfSerialNumbers = _db.Category.Where(a => a.CategoryID == categoryID).Select(i => i.SerialNumber).ToList(); foreach(var i in listOfSerialNumbers) { ... }
  • @Konrad P 这很有意义 - 感谢您帮助我!投票将您的评论作为感谢礼物:)

标签: c# linq foreach asp.net-core-mvc


【解决方案1】:

我建议如下。

foreach(var i in category.count)
{
    var getDifferentSerialNumberforEachLoop = _db.Category.Where(a => a.CategoryID == 
    categoryID).Select(i=>i.SerialNumber).ToList().ForEach(serialNo => {
      Console.WriteLine(serialNo);
    });
}

您说您“不能使用 List,因为您一次需要一个序列号”,但执行 ToList() 和 ForEach 将允许您一次迭代每个序列号。

【讨论】:

  • 是的,这是有道理的 - 感谢您的快速回答!我给了它一个积极的印象,因为它做了我一直坚持的事情。谢谢!
猜你喜欢
  • 2016-08-08
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 2019-08-07
  • 2020-06-19
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多