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 命名约定。
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 命名约定。