0

私は一般的な EF アプローチについて考え始めました

コード スニペット:

protected Dictionary<string, object> CachedObjects = new Dictionary<string, object>();

protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : EntityObject
{
   var fulltypename = typeof(TEntity).AssemblyQualifiedName;
   if (fulltypename == null)
       throw new ArgumentException("Invalid Type passed to GetObjectSet!");
   if (!CachedObjects.ContainsKey(fulltypename))
   {
       var objectset = base.CreateObjectSet<TEntity>();
       CachedObjects.Add(fulltypename, objectset);
   }
            return CachedObjects[fulltypename] as ObjectSet<TEntity>;
}

...

public TEntity GetFirstOrDefault<TEntity>(Func<TEntity, bool> predicate) where TEntity : EntityObject
{
   return GetObjectSet<TEntity>().FirstOrDefault(predicate);
}

そして今、その 2 行のコードが等しい場合は?

adapter.db.GetFirstOrDefault<MyTable>(x => x.ID == 1);
adapter.db.MyTable.FirstOrDefault(x => x.ID == 1);

すべてのアイテムをメモリにロードしてから、それらをフィルタリングしたくないので、私は尋ねています。そのような一般的な操作を のようにするアプローチはありますIQueryable<T>か?

4

1 に答える 1

1

すべてのアイテムをメモリにロードしてから、それらをフィルタリングしたくないので、私は尋ねています。そのような一般的な操作を IQueryable として作成する方法はありますか?

Func<TEntity, bool>の代わりに使用するため、すべてのアイテムをロードしてメモリ内でフィルタリングを行いますExpression<Func<TEntity, bool>>。さらに、セットをキャッシュするためにいくつかの役に立たないインフラストラクチャを使用します。objectContext.CreateObjectSet<TEntity>オブジェクトセットを取得するために使用するだけです。

于 2012-08-10T14:34:31.433 に答える