2013-10-03 3 views
1

Vs'12, asp.net MVC4 Internet Application, EF Code First, MySQL дбБаза данных Запрос от контроллера Возвращение запроса не значения

Обзор

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

Объяснение

Я попробовал этот путь: Где intPR = 1, как принятый в переменной

var pro = from p in db.Prospect 
     where p.ProspectID == intPR 
     select p; 
var cty = from c in db.Countys 
     from p in db.Prospect 
     where p.ProspectID == intPR 
     select c; 

тогда я хотел бы использовать что-то вроде этого, чтобы установить его в поле

string x = pro.Select(p => p.ProspectName).ToString(); 
      ws.Cells["E" + LineFeed].Value = x; 

string xx = cty.Select(m => m.County).ToString(); 
      ws.Cells["E" + LineFeed].Value = xx; 

Все, что я получаю супер длинные строки запроса

"SELECT 
[Extent1]...... You get the hint 

Вопрос

Почему я не получаю значения?

ответ

2

Поскольку вы используете LINQ, выражение оценивается только тогда, когда результаты действительно необходимы. Обратите внимание, что select фактически возвращает IEnumerable или IQueryable. Это только если на самом деле хотите использовать значения, которые он выполняет запрос. Метод по умолчанию ToString() просто распечатывает запрос.

Вы могли бы, например, вызвать метод ToList(), чтобы убедиться, что запрос exectuted:

var prospects = pro.Select(p => p.ProspectName).ToList(); 

Однако, это будет возвращать список перспектив, называя ToString() -метода на том, что будет по-прежнему дают только имя типа. Если вы хотите, чтобы первый элемент списка вы можете сделать следующее:

var firstProspectName = pro.Select(p => p.ProspectName).First(): 

EDIT: Ваш запрос может быть написан немного более кратким, без промежуточных стадий:

var firstProspectName = db.Prospect.where(p => p.ProspectID == intPR) 
            .Select(p => p.ProspectName) 
            .First(); 
+0

Спасибо так много для быстрый ответ, я использовал ваш ответ и просто добавил в 'pro.ToList();' по моему запросу, это считается «OKAY», или я должен использовать ваш маршрут 'var pro = db.Prospect.Select (p => p .ProspectName) .ToList(); 'из git go? – Pakk

+0

Это нормально, но вы можете немного оптимизировать его. Я добавил пример моего ответа о том, как вы могли бы написать его немного более кратким. – Kenneth

Смежные вопросы