2011-11-11 24 views
0

は、私は私のプロジェクトでは2つのテーブルを持っています。 だから、私はテーブルを持っている:ジェネリックメソッドおよびLINQ

TableLock{ 
ID int primary key, 
IDEnvelope int, 
IDCheck int 
UserId int 
. 
. 
. 
} 

私は私のテーブル内のN行を取得し、それをロックする一般的な方法をやろうとしているが、私はできません。

public IQueryable<TEntity> LockDocument<TEntity>(IQueryable<TEntity> colEntity, int countRows) 
{ 
    TEntity objEntity = default(TEntity); 
    Database db = new Database(); 


    var vQuery = (from entity in db.CreateObjectSet<TEntity>() 
       Join tableLock in db.TableLock 
       // I have problems here. 
        on entity.ID equals tableLock.IDEntity 
       where entity.ID not in tableLock.IDEntity).select().Take(countRows) 
} 

どうすればいいですか? ありがとうございます。

+0

ユーザーは封筒と小切手の関係を所有しているので、小切手や封筒自体はチェックしていませんか? – Jodrell

+0

@ Jodrell関係は封筒と小切手の間にありますが、ユーザーは封筒や小切手のいずれかを手に入れることができるので、彼が使用している文書のIDであるtableLockを追加する必要があります。 – cristiam

答えて

2

メソッドに追加情報を提供するには、TEntityを制約する必要があります。たとえば、インターフェイスを定義することができます。

public interface IEntity 
{ 
    int ID { get; } 
} 

このインターフェイスを、メソッドに渡すすべてのエンティティで実装します。今、あなたはあなたのメソッドの定義を変更することができます。

public IQueryable<TEntity> LockDocument<TEntity>(IQueryable<TEntity> colEntity, 
               int countRows) 
    where TEntity : IEntity 
{ ... } 

これは、IEntityを実装するだけの種類を受け入れ、あなたの方法でIEntityによって定義された任意のプロパティやメソッドを使用することができます=あなたがにアクセスする必要がありますあなたの方法を教えてくれますentity.ID

関連する問題