泛型方法和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)
}
我该怎么做?
您必须约束您的TEntity为您的方法提供额外的信息。例如,您可以定义接口:
public interface IEntity
{
int ID { get; }
}
并通过你想传递给你的方法的所有实体实现这个接口。现在您可以将方法的定义更改为:
public IQueryable<TEntity> LockDocument<TEntity>(IQueryable<TEntity> colEntity,
int countRows)
where TEntity : IEntity
{ ... }
这将告诉你的方法,它只接受实现IEntity
的类型,你可以在你的方法中使用IEntity
定义的任何属性或方法=你将有权访问entity.ID