2013-10-03 158 views
1

Vs'12,asp.net MVC4互聯網應用,EF代碼首先,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實際上會返回IEnumerableIQueryable。只有實際上想要使用它執行查詢的值。默認的ToString()方法只是打印查詢。

例如,你可以調用ToList()方法,以確保查詢exectuted:

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

然而,這將返回前景的名單,呼籲ToString() - 方法上仍然會產生只是名字的類型。如果你想在列表的第一個項目,你可以做到以下幾點:

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

編輯:您的查詢可以寫成更簡潔一點,沒有中間步驟:

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中去? – Pakk

+0

這是好的,但您可以優化一點。我已經爲我的答案增加了一個例子,說明如何將它寫得更加簡潔。 – Kenneth

相關問題