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

本文关键字:SingleOrDefault 元素 包含多 InvalidOperationException | 更新日期: 2023-09-27 18:26:30

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();
}

通过在堆栈溢出上搜索,我很清楚FirstOrDefault()是避免这种执行的最佳方法。但是,如果我想在我的列表中添加多条记录一次,那么解决方案是什么?由于">getClassFromExcelPivotedValuedreductionBy"在这里返回3条记录。请帮帮我解决这个问题。

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

但是,如果我想在我的列表中添加多条记录一次,那么解决方案是什么?

您的意思是要添加所有结果?假设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 命名约定。