【发布时间】: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