通用方法和linq

时间:2011-11-11 09:25:21

标签: c# entity-framework generics join where-clause

我的项目中有2个表:

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

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

我必须将每个文档“阻止”给特定用户,因为2个用户看不到相同的信息。 所以我有我的桌子:

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

我正在尝试使用Generic方法在我的表中取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)
 }

我该怎么做? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您必须限制您的TEntity以向您的方法提供其他信息。例如,您可以定义interface:

public interface IEntity
{
    int ID { get; }
}

并且要将要传递给方法的所有实体实现此接口。现在,您可以将方法的定义更改为:

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

这将告诉您的方法它只接受实现IEntity的类型,并且您可以在方法中使用IEntity定义的任何属性或方法=您将有权访问entity.ID。< / p>