2014-02-06 2 views
0

Привет Я хочу создать общий запрос linq, который получает необходимую информацию о выпадающем списке из базы данных. Я хочу, чтобы иметь возможность указать объект, который я хочу получить данные из контекста.Пропустить тип сущностей через метод в EF

например.

public IEnumerable<T> getListOfDropdowns(int assignId, TEntity entityname) 
{ 
    return context.<TEntity>.Where(x => x.assignId == 1); 
} 

Все таблицы поиска содержат те же свойства. например. ID и Описание.

теперь у меня

public IQueryable<T> GetLookupByContractorTwo<TEntity>(int contractorId, TEntity entity) 
{ 
return _context.Set<entity>().Find(contractorId); 
} 

Но я получаю сообщение об ошибке сказав объект не может быть найден и пропуском referencbut я не могу найти ссылку.

+0

Какую версию EF вы используете? DbSet является общим, не так ли? – Yakimych

+0

Я использую EF 6.0.2 –

+0

Это: 'return _context.Set () .Find (contractorId);' не имеет смысла ... Это должно быть: 'return _context.Set () .Find (contractorId); ' – thepirat000

ответ

1

Попробуйте с этим:

public IQueryable<TEntity> GetLookupByContractorTwo<TEntity>(int contractorId) 
{ 
    return _context.Set<TEntity>().Find(contractorId); 
} 

Вам не нужно передать тип в качестве параметра, если вы используете генериков.


Редактировать

Вы, вероятно, хотите сделать это:

public IQueryable<T> GetLookupByContractorTwo<TEntity>(int contractorId) 
{ 
    return _context.Set(typeof(TEntity)).Find(contractorId); 
} 
+0

Тогда как узнать, какие данные мне нужны из выпадающего списка, так как у каждого набора выпадающих списков есть своя таблица? –

+0

Я отредактировал свой ответ. Можете ли вы добавить код, который вы пытаетесь использовать, чтобы заполнить выпадающие списки? – thepirat000

0

Вместо этого вы можете использовать метод Find. Find использует первичный ключ для поиска.
Еще одна хорошая вещь о Find заключается в том, что она будет выполнять обратную связь с базой данных только в том случае, если объект не найден в контексте.

Это должно сделать трюк:

var result = context.Set<TEntity>().Find(assignId); 
Смежные вопросы