#c# #entity-framework #generics #join #where-clause
#c# #entity-framework #универсальные методы #Присоединиться #где-предложение
Вопрос:
У меня есть 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. @Jodrell Связь существует между конвертами и чеками, но пользователь может получить либо конверт, либо чек, поэтому я должен добавить в TableLock идентификатор документа, который он использует.
Ответ №1:
Вы должны ограничить свой TEntity для предоставления дополнительной информации вашему методу. Например, вы можете определить интерфейс:
public interface IEntity
{
int ID { get; }
}
И реализуйте этот интерфейс всеми объектами, которые вы хотите передать своему методу. Теперь вы можете изменить определение вашего метода на:
public IQueryable<TEntity> LockDocument<TEntity>(IQueryable<TEntity> colEntity,
int countRows)
where TEntity : IEntity
{ ... }
Это сообщит вашему методу, что он принимает только реализующие типы IEntity
, и вы можете использовать любое свойство или метод, определенные IEntity
в вашем методе, к которому у вас будет доступ entity.ID
.