2013-06-24 25 views
-3

我有一個碼部分與List<object>這樣的:如何爲列表<object>創建語句?

List<object> Result= new List<object>(); 
Some sql connection code... 

SqlCommand com = new SqlCommand(@" Select TOP(10) a,b,c from table 

一些SQL連接代碼...

while (rd.Read()) 
     { 
      Result.Add(new 
      {     
       a=rd[0], 
       b=rd[1],    
       c=rd[2]  
      }); 
     } 
     rd.Close(); 
     con.Close(); 

我想添加一些語句Result值。例如

if(a == "") 
a=5; 

和i的JavaScript部分

var listCategory = $find("ace2").get_completionList(); 

      var count2 = listCategory .childNodes.length; 
      for (j =0; j < count2; j++) {     
       var item2 = listCategory .childNodes[j]._value; 
       var a= item2.a; 
       var b= item2.b; 
       var c= item2.c; 
      } 

使用List<object>和i的HTML使用此值。

如何爲List<object>()增加一些聲明值?

+1

這裏真的不完全清楚你的意思是「某些陳述」。 –

+0

Bip,我想你應該先閱讀這篇文章[Jon Skeet撰寫的完美問題](http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question。 aspx) – horgh

+0

你在問什麼不清楚。無論如何,我猜你的問題是你用匿名類填充對象列表,然後嘗試從列表中的元素讀取a,b和c失敗。您應該使用具有屬性a,b和c的命名類(例如Result),並使用結果列表。 –

回答

0

如果我理解您希望對條件初始化運行時類型,之前將其添加到列表中。

所以,你可以創建一個函數:

public object GetObject(SqlDataReader rd) { 


    var aVal = rd[0]; 
    if(string.IsNullOrEmpty(aVal)) 
     aVal = "5"; //STRING, in your case it's a NUMBER 

    return new 
      {     
       a=aVal, 
       b=rd[1],    
       c=rd[2]  
      }); 
} 

,並在使用後在此添加:

while (rd.Read()) 
{ 
    .... 
    Result.Add(GetObject(rd)); 
    ..... 
} 

如果這是你不問什麼,請澄清。

+1

爲什麼不只是'{a = rd [0] ==「」? 「5」:rd [0],b = ..' –

+0

@ConradFrix:我只想*清楚*明確我說的話。如何寫就取決於OP。是的,在這個具體情況下,它可以做到,沒有任何功能。但是,因爲我不清楚,OP要求的* realy *,更喜歡更普遍的(概念,如果你願意的話)解決方案。 – Tigran

1

不知道你要返回多少列嗎?如果你確實知道創建一個持有者類別,那麼你必須自己處理強制轉換,並且不易維護。

List<KnownType> Result= new List<KnownType>(); 
a=rd[0]; 
b=rd[1], 
c=rd[2] 
if(a=="" or string.IsNullOrEmpty(a) or YourCondition) 
{ 
change what ever values you want 
} 
Result.Add(new KnownType 
      {     
       a,b,c 
      }); 
+0

IsNullOrEmpty涵蓋了一個==「」,所以你不需要兩個。另外'或'不會工作,你需要'|'或'||' –