我有这段代码:
public DbSet<TDestination> Table
{
get { return Db.TSource; }
}
如何将DbSet<TSource>
转换为DbSet<TDestination>
?
答案 0 :(得分:0)
我会使用一个完全符合你想要的转换器,可以在任何你想要的地方重复使用。我在这里做了一个自我提取的答案:Expression-tree to build sub-select results
或者在我的示例中关闭值,你也可以内联它:
ChildPOC poc = new ChildPOC(1, "Brett", "X");
var alterPocOnDemand = new ChildPOCAlter(poc.FirstName, poc.LastName, poc.ParentId);
我会单独留下EF Db Sets并在它们之后提供一个级别。除非您要更改EF的T4模板(项目中的* .tt文件),否则您正在尝试将DBSet的对象转换为DBSet。通常那些是可查询的对象,意味着由EF以某种方式起作用而不是完全实现的对象。它们与EF紧密缠绕在一起,因此做这样的事情要好得多:
List<X> realItems = new List<X>();
using(var context = new YourContext())
{
realItems = context.Table.Where(x => x.Thing == "some predicate").ToList();
}
当你使用接近EF级别的DbSet并且是一个更接近数据库的方法而不是List,IEnumerable或其他容器对象完全实现并且能够更容易地重用。