Как обрабатывать ObjectResult в Entity Framework 4
В Entity Framework 4 у меня возникает проблема, когда я использую импорт функции в хранимую процедуру, а затем использую ее как скалярное значение. Он генерирует следующий код:
public virtual ObjectResult<Nullable<int>> GetTopEmployee()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee");
}
Как использовать возвращаемое значение этого метода?
Например, этот код отлично работает:
NorthwindEntities db = new NorthwindEntities();
var i = db.GetTopEmployee();
Но я хочу использовать возвращаемые значения только как int. Если я использую возвращаемое значение как non while в функции import, оно дает -1 в качестве вывода.
Когда я пробую код ниже:
NorthwindEntities db2 = new NorthwindEntities();
int j = db.GetTopEmployee();
Он выдает сообщение об ошибке:
Невозможно неявно преобразовать тип 'System.Data.Objects.ObjectResult' в 'int'
Как разобрать выше?
Ответы
Ответ 1
Обратите внимание, что тип возврата GetTopEmployee
- это ObjectResult<Nullable<int>>
. ObjectResult<T>
реализует IEnumerable<T>
, поэтому ваш метод способен возвращать более одного Nullable<int>
.
Я предполагаю, что вы пытаетесь получить форму Id для сотрудника. Если вы абсолютно уверены, что получите только один результат, вы можете использовать следующий код для получения этого идентификатора.
var topId = db.GetTopEmployee().FirstOrDefault();
topId
может быть нулевым. Вам нужно будет использовать topId.Value
или var result = topId ?? -1;
, чтобы получить результат int.
NorthwindEntities db = new NorthwindEntities();
int j = db.GetTopEmployee().FirstOrDefault() ?? -1;