我不确定这是否是解决这个问题的正确方法,所以我希望通过这个问题能够获得领先优势。
假设我在大多数表中都有一个包含特定重复列的数据库。在我的大多数(如果不是全部)查询中,我必须对此特定列进行过滤(即检查它是否为空)。 这导致在该地方散布着很多'。(其中x => x.Thingy == null)'。
本身这当然不是一个问题,但我想知道我是否可以把这种行为放在'更高'的某个地方,比如IQueryable,作为标准行为。有了侧面注意,在极少数情况下,过滤是不需要的。基本上,对表的每个(部分)查询都需要使用'WHERE thingy IS NULL'进行扩展,并在连接等中交织。
问题在于我真的不太清楚从哪里开始。我不是在寻找实现,因为我宁愿自己想出详细的细节。
我正在寻找的是一个可以开始的地方,或者如果可能的话。 IQueryable是正确的开始方式吗?
答案 0 :(得分:1)
您应该能够简单地公开预过滤的IQueryable<T>
属性:
public class ThingContext : DbContext
{
public DbSet<Thing> Things
{
get { return Set<Thing>(); }
}
public IQueryable<Thing> ThingsWithoutThingy
{
get { return Things.Where(x => x.Thingy == null); }
}
}
任何插入和未过滤的查询都需要在Things
属性上完成。任何已过滤的查询都应使用ThingsWithoutThingy
属性。
答案 1 :(得分:0)
你也可以在Thing上使用扩展方法:
public static class ThingExtensions
{
public static IQueryable<Thing> WithoutThingy(this IQueryable<Thing> query)
{
return query.Where(x => x.Thingy == null);
}
}
然后你就这样使用它:
Things.WithoutThingy().Select(...)