我有一段很不错的代码,其中我在对象类型的集合中打包了几种类型的对象。它们需要插入数据库中。我使用EF core 2.1和一个流行的扩展名为EFCore.BulkExtensions,位于代码下方:
List<object> mappedContent = MapContent(elements, mappings);// a million records
List<typeA> tAlist= new List<typeA>();
List<typeB> tBlist= new List<typeB>();
List<typeC> tClist= new List<typeC>();
foreach (var record in mappedContent)
{
switch (record.GetType().Name)
{
case "TypeA":
tAlist.Add((TypeA)record);
break;
case "typeB":
tBlist.Add((typeB)record);
break;
case "typeC":
tClist.Add((typeC)record);
break;
default:
Throw new Exception(" Unknown type");
}
}
context.BulkInsert(tAlist);
context.BulkInsert(tBlist);
context.BulkInsert(tClist );
我有20多种不同的对象类型,我想知道我是否可以避免代码中的某些重复。另外,我想做到这一点而不影响性能,甚至不能提高当前性能,这要归功于我使用的库。
提前谢谢了
乙
听起来像是一份工作 OfType
根据指定的类型过滤IEnumerable的元素。
var tAlist = mappedContent.OfType<TypeA>();
// do wonderful fun stuff with a list of TypeA
注意,在性能方面,这可能会比您使用的要好。但是来源OfType
基本上是
foreach (object obj in source)
{
if (obj is TResult) yield return (TResult)obj;
}
每次调用它基本上都是时间复杂度O(n)。
如果您想要一种更高效,更冗长的方法,类似于您所拥有的,却又更现代,更高效的方法。你可以使用C#7.0的模式匹配的switch
foreach (var record in mappedContent)
switch (record )
{
case TypeA typeA:
tAlist.Add(typeA);
break;
...
尽管您必须列出20个ect,ect,ect,但它会给您平O(n)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句