0

我不确定这是否是解决这个问题的正确方法,所以我希望通过这个问题获得领先。

假设我在大多数表中都有一个包含某个重复列的数据库。在我的大多数(如果不是全部)查询中,我必须过滤这个特定的列(即检查它是否为空)。这导致很多'.Where(x => x.Thingy == null)'散布在这个地方。

这本身当然不是一个真正的问题,但我想知道我是否可以将这种行为作为标准行为放在“更高”的某个地方,比如在 IQueryable 中。附带说明的是,在极少数情况下,过滤是不需要的。基本上,对表的每个(a 的一部分)查询都需要使用“WHERE thingy IS NULL”进行扩展,交织在连接等中。

问题是我真的不太确定从哪里开始。我不是在寻找实现,因为我宁愿自己弄清楚细节。

我正在寻找的是一个开始的地方,或者这是否可能。IQueryable 是正确的开始方式吗?

4

2 回答 2

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属性。

于 2013-04-11T17:55:00.797 回答
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(...)
于 2014-09-12T15:09:28.870 回答