2012-03-11 34 views
32

在Entity Framework 4中,當我將函數導入到存儲過程,然後將其用作標量值時,我遇到了一個問題。它生成以下代碼:如何在實體框架中處理ObjectResult 4

public virtual ObjectResult<Nullable<int>> GetTopEmployee() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>("GetTopEmployee"); 
} 

如何使用此方法的返回值?

例如,此代碼工作正常:

NorthwindEntities db = new NorthwindEntities(); 
var i = db.GetTopEmployee(); 

但我想用返回值只作爲INT。如果我在函數導入時使用返回值作爲非值,它將給出-1作爲輸出。

當我嘗試下面的代碼:

NorthwindEntities db2 = new NorthwindEntities(); 
int j = db.GetTopEmployee(); 

它拋出一個錯誤說:

無法隱式轉換類型 'System.Data.Objects.ObjectResult' 到 '廉政'

我如何解析上述?

+1

給出'-1'作爲輸出的代碼是什麼?我不明白「在函數導入時返回值爲非」。 – 2012-03-11 11:06:40

+0

我的意思是如果通過函數導入重新調整我的存儲過程,然後將返回值標記爲none,那麼它將給出-1作爲輸出 – user1037747 2012-03-11 11:18:44

回答

77

請注意,返回類型GetTopEmployeeObjectResult<Nullable<int>>ObjectResult<T> implements IEnumerable<T>因此您的方法能夠返回多個Nullable<int>

我假設你正試圖爲員工獲得某種形式的Id。如果你確信你只會得到一個結果,你可以使用下面的代碼來獲得該Id。

var topId = db.GetTopEmployee().FirstOrDefault(); 

topId可能爲空。您將不得不使用topId.Valuevar result = topId ?? -1;來獲得int結果。

NorthwindEntities db = new NorthwindEntities(); 
    int j = db.GetTopEmployee().FirstOrDefault() ?? -1; 
+0

如果您確定要獲得一個結果,則應該使用db.GetTopEmployee( ).First()',換句話說,如果你想在沒有返回結果的情況下接收到異常,就使用它。 – xr280xr 2018-02-08 23:34:38