Общий метод и linq - PullRequest
       26

Общий метод и linq

0 голосов
/ 11 ноября 2011

У меня есть 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
.
.
.
}

Я пытаюсь сделать общий метод, чтобы взять 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 Ответ

2 голосов
/ 11 ноября 2011

Вы должны ограничить свой TEntity, чтобы предоставить дополнительную информацию для вашего метода.Например, вы можете определить интерфейс:

public interface IEntity
{
    int ID { get; }
}

И реализовать этот интерфейс всеми объектами, которые вы хотите передать своему методу.Теперь вы можете изменить определение вашего метода на:

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

Это скажет вашему методу, что он принимает только типы, реализующие IEntity, и вы можете использовать любое свойство или метод, определенный IEntity в вашем методе= у вас будет доступ к entity.ID.

...