假设我有收集IList<Items> items = GetItems();
我想将该集合转换为MyDbSet<Items>
MyDbSet声明如下:public class MyDbSet<T> : IDbSet<T> where T : class
如何使用较少的代码执行此操作,可能最好使用linq?
答案 0 :(得分:1)
对于支持ICollection<T>.Add
的集合,您可以编写如下的辅助方法:
public static TCollection CreateCollection<TCollection,TElement>(IEnumerable<TElement> seq)
where TCollection:ICollection<TElement>, new
{
var coll=new TCollection();
foreach(var element in seq)
coll.Add(element);
return coll;
}
使用如下:
var coll = CreateCollection<MyDbSet<T>, T>(seq);
但我个人宁愿写一个AddRange(seq)
扩展方法然后使用它:
var coll = new MyDbSet<T>();
coll.AddRange(seq);
答案 1 :(得分:1)
我认为除了循环源集合并在Add
类实例上调用MyDbSet
之外,还有其他方法,但它可以隐藏在自定义扩展方法中:
public static class MyEnumerable
{
public static MyDbSet<T> ToMyDbSet<T>(this IEnumerable<T> source)
where T : class
{
var collection = new MyDbSet<T>();
foreach (var item in source)
collection.Add(item);
return collection;
}
}
用法:
IList<Items> items = GetItems();
MyDbSet<Items> itemsSet = items.ToMyDbSet();