2014-09-18 2 views
1

Я новичок в Entity Framework. Пожалуйста помоги.Entity DBContext to LinQ

Я получаю Stored Proc результат и привязку к Server controlRepeater с использованием Entity Framework, DBCoontext. Теперь с этим результатом мне нужно выполнить другую операцию, чтобы получить счетчик записей и назначить его Label.

using(var DBContext = new DBEntities()) 
{ 
    Repeater.DataSource = DBContext.SP_GetRecords();     
    Repeater.DataBind(); 
    Label.Text = DBContext.SP_GetRecords().Count().ToString(); 
} 

Проблема: Я не хочу называть SP_GetRecords снова(). Значит, я не хотел делать SQL-запрос. В прямом ADO.NET мы можем получить результат в DataTable, привязать к элементу управления, применить LinQ, чтобы получить счет на основе некоторого состояния. Можем ли мы сделать то же самое в EntityFramework?

+1

Что «Это не работает» означает? – entropic

+0

Повторитель показывает пустой – Interstellar

+0

Я отредактировал вопрос. Пожалуйста, помогите в ненужном вызове SQL DB, который я делаю. – Interstellar

ответ

2

Я понятия не имею, правильно ли я понял вопрос, но будет ли это трюк для вас? Обратите внимание на вызов ToList() на выборку, чтобы убедиться, что мы перечисляем только один раз.

using(var DBContext = new DBEntities()) 
{ 
    var records = DBContext.SP_GetRecords().ToList(); // Enumerate 
    Repeater.DataSource = records; // will not     
    Repeater.DataBind(); 
    Label.Text = records.Count().ToString(); 
} 
+0

Спасибо .. Я не знал о ToList() – Interstellar

+0

Вам не нужен метод LINQ 'Count()', если вы явно отправляете его в список, используя '.ToList()'. '.Count' хватило бы. – entropic

2

Вы можете присвоить свою хранимую процедуру результату, а затем назначить/выполнить операции на нем, как вам хотелось бы. Я не знаю, что она возвращает (так я предполагаю, что список/IEnumerable какой-то), но вы по существу можете сделать это:

using(var DBContext = new DBEntities()) 
{ 
    var results = DBContext.SP_GetRecords(); 
    Repeater.DataSource = results;     
    Repeater.DataBind(); 
    Label.Text = results.Count.ToString(); 
} 
+0

мы не можем этого сделать. Я пробовал это раньше .. results.count не сработает во время компиляции – Interstellar

+0

Как я уже сказал - я понятия не имею, каков ваш тип возврата. Если ваш тип возврата из 'DBContext.SP_GetRecords()' является типом 'List ', то вы можете. В противном случае используйте 'Count()' – entropic