泛型方法和linq

本文关键字:linq 泛型方法 | 更新日期: 2023-09-27 18:14:04

我有2个表在我的项目:

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)
 }

我该怎么做?

泛型方法和linq

您必须约束您的TEntity为您的方法提供额外的信息。例如,您可以定义接口:

public interface IEntity
{
    int ID { get; }
}

并通过你想传递给你的方法的所有实体实现这个接口。现在您可以将方法的定义更改为:

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

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