2013-07-08 25 views
0

我見過很多人以某種方式顯示數據記錄,我認爲個人效率不高,但我遵循這些方法不滿意,因爲我認爲在應用程序生命週期的某個時間點,數據記錄可能會達到很大數量,這樣,在循環所有記錄,生成數據,然後將該數據打印到瀏覽器時,會減慢應用程序的執行速度和性能,作爲一個例子來看看這個代碼,如何使用EF/LINQ在asp.net中顯示多個記錄(最好的方法)

var query2 = from m in JE.J_Posted_Jobs_Tbl 
join n in JE.J_Genders_Tbl on m.J_Job_Location equals n.J_Gender_ID 
select new { 
m.J_Job_ID, 
m.J_Job_Title, 
m.J_Job_Description, 
m.J_Job_Package, 
m.J_Job_Timing, 
n.J_Gender 
}; 


string datarow = ""; 
foreach(var result in query2){ 
datarow = datarow + "<div class='eachjob'>"+ 
     "<a href='Employeer-Details.aspx'>"+ 
     "<div class='eachjobCompanyImg'>"+ 
"<img src='includes/images/premiummembers/premiummeber1.gif' width='60' height='60'/>"+ 
"</div>"+"</a>"+"<div class='eachjobName'> 
<a href='Jobs-Details.aspx?J_PostedJob_ID="+result.J_Job_ID+"'>"+result.J_Job_Title+" 
</a> 
    </div>"+"<div class='eachjobName'>Islamabad</div>"+ 
      "<div class='eachjobDescription'>"+ 
       ""+result.J_Job_Description+""+ 
     "</div>"+ 
     "<div class='eachjobName'>"+result.J_Job_Package+"</div>"+ 
     "<div class='eachjobName'>"+result.J_Job_Timing+"</div>"+ 
     "<div class='eachjobName'>"+result.J_Gender+"</div>"+ 
     "<div class='eachjobFuncDiv'>"+ 
      "<div class='eachjobFunDivBlock'>"+ 
       "<div class='eachjobFunDivBlockImg'>"+ 
        "<img src='includes/images/jobFunLogos/jobMarkHired.png' />"+ 
       "</div>"+ 
       "<div class='eachjobFunDivBlockName'>Mark Hired</div>"+ 
      "</div>"+ 
      "<div class='eachjobFunDivBlock'>"+ 
       "<div class='eachjobFunDivBlockImg'>"+ 
        "<img src='includes/images/jobFunLogos/jobMakeDisApply.png' />"+ 
       "</div>"+ 
       "<div class='eachjobFunDivBlockName'>Disable Job</div>"+ 
      "</div>"+ 
     "</div></div>"; 
} 
YourPostedJobs.InnerHtml = datarow; 

is this method any efficient? If not, plz tell me an efficient way which is 
application friendly. 
Thanks in advance! 

回答

2

一個明顯的改進是在同一時間返回數據的頁面,而不是每個項目一氣呵成。要做到這一點,你會使用Linq Skip()Take()在查詢:

var query2 = from m in JE.J_Posted_Jobs_Tbl 
join n in JE.J_Genders_Tbl on m.J_Job_Location equals n.J_Gender_ID 

select new { 
m.J_Job_ID, 
m.J_Job_Title, 
m.J_Job_Description, 
m.J_Job_Package, 
m.J_Job_Timing, 
n.J_Gender 
}; 

var pagedQuery = q2.Skip(pageSize * (page -1)).Take(pageSize); 

另一個步驟將是停止通過連接這樣的字符串構建HTML。當然,最好是返回數據並讓瀏覽器使用javascript進行渲染!或者如果您必須必須像這樣在服務器上構建它,則至少要使用StringBuilderstring.Format()

+0

偉大的答案邁克!讚賞 –

相關問題