[asp.net]能反转︰ 序列包含多个元素-SingleOrDefault()

标签: Asp.net Linq C#
发布时间: 2017/3/26 1:44:31
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
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 条记录。请帮我在这。

解决方法 1:

但如果我想要一次添加多个记录在我的列表中然后解决方案是什么?

你的意思是你想要添加所有结果?假设 lifeReductionByDataList<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 到) 会简短;b) 遵循.NET 命名约定。

赞助商