将DbSet <t1>转换为DbSet <t2>,其中T1和T2具有相同的签名

时间:2017-05-17 14:50:50

标签: c# entity-framework

我有这段代码:

public DbSet<TDestination> Table
{
    get { return Db.TSource; }
}

如何将DbSet<TSource>转换为DbSet<TDestination>

1 个答案:

答案 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或其他容器对象完全实现并且能够更容易地重用。