InvalidOperationException:序列包含多个元素 - SingleOrDefault()

InvalidOperationException: Sequence contains more than one element - SingleOrDefault()

using (var db = new ABC())
{

for (int column = rangeClass2.Start.Column; column <= rangeClass2.End.Column; column++)
{
   var classValue = censusSheet.Cells[row, column].Value;
   var description = censusSheet.Cells[3, 27].Value;
 lifeReductionByData.Add(classASheet.getClassFromExcelPivotedValuedreductionBy<tbl_Life_Reduction_By>(25, 1, 33, 4, lifeReductionByClassMapper).FirstOrDefault());
 for (int i = 0; i < lifeReductionByData.Count; i++)
 {
     lifeReductionByData[i].Class = classesValue[x];
     lifeReductionByData[i].UUID = censusSheet.GetValue(25, 27).ToString();
 }
}
var entry = new tbl_Life_Master() { UUID = uuidVar };
entry.tbl_Life_Reduction_By = lifeReductionByData;
context.tbl_Life_Master.Add(entry);
context.SaveChanges();
}

通过在 Stack Overflow 上搜索,我很清楚 FirstOrDefault() 是避免此异常的最佳方法。但是,如果我想一次在我的列表中添加多条记录,那么解决方案是什么?由于 'getClassFromExcelPivotedValuedreductionBy' 这里返回 3 条记录。请帮我解决这个问题。

But if I want to add multiple records in my list once then what is the solution?

您的意思是要添加 所有 结果?假设 lifeReductionByData 是适当类型的 List<T>,您可以只使用 List<T>.AddRange:

var query = classASheet.getClassFromExcelPivotedValuedreductionBy<tbl_Life_Reduction_By>(25, 1, 33, 4, lifeReductionByClassMapper);
lifeReductionByData.AddRange(query);
foreach (var item in lifeReductionByData)
{
    item.Class = classesValue[x];
    item.UUID = censusSheet.GetValue(25, 27).ToString();
}

注意这里使用的是foreach而不是索引。现在,如果 lifeReductionByData 在这段代码之前实际上是空的,而你之后不需要它,你可以迭代查询本身:

var query = classASheet.getClassFromExcelPivotedValuedreductionBy<tbl_Life_Reduction_By>(25, 1, 33, 4, lifeReductionByClassMapper);
foreach (var item in query)
{
    item.Class = classesValue[x];
    item.UUID = censusSheet.GetValue(25, 27).ToString();
}

如果您之后需要列表,但之前它是空的,那么我会使用:

var query = classASheet.getClassFromExcelPivotedValuedreductionBy<tbl_Life_Reduction_By>(25, 1, 33, 4, lifeReductionByClassMapper);
var list = query.ToList();
foreach (var item in list)
{
    item.Class = classesValue[x];
    item.UUID = censusSheet.GetValue(25, 27).ToString();
}

接下来,我将 getClassFromExcelPivotedValuedreductionBy 重命名为 a) 更简短; b) 遵循 .NET 命名约定。