在Entity Framework中对不同的DbSet使用相同的查询

时间:2012-03-20 07:42:28

标签: c# entity-framework

我对同一个数据库表有两个不同的视图,我想对两个视图使用相同的查询。

我现在遵循丑陋的解决方案,我基本上都是查询的副本。

DbSet<uvw_MyView1> view1 = entities.uvw_MyView1;
DbSet<uvw_MyView2> view2 = entities.uvw_MyView2;

if(doQueryOnView1)
{
    // huge query
    view1.Where(jada jada)
}
else
{
    // huge query copied here with exception of different DbSet
    view2.Where(jada jada)
}

我想拥有的是更优雅的解决方案。基本上我想为两个DbSet提供相同的查询部分,这两个DbSet在列方面完全相同,但是那些返回不同的行。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

添加包含视图所有属性的界面,并由两个视图实体实现此界面。之后创建包含整个查询的方法:

public static IQueryable<T> YourHugeQueryMethod<T>(DbContext context, ...) 
     where T : class, IView, new()
{
    DbSet<T> set = context.Set<T>();
    return set.Where(...);
}