2011-11-11 60 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