2011-11-11 57 views
0

我已經在我的項目2個表:泛型方法和LINQ

TableEnvelope{ 
ID int primary key, 
EnvelopeNumber int, 
. 
. 
.  
} 

TableCheck{ 
ID int primary key, 
CMC7 varchar 
. 
. 
. 
} 

我要「阻止」每個文檔到特定的用戶,因爲用戶無法看到相同的信息。 所以,我有我的表:

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關係在信封和支票之間,但用戶可以獲得信封或支票,所以我必須添加他正在使用的文檔的tableLock ID。 – 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