【问题标题】:How to create statement for List<object>? [closed]如何为 List<object> 创建语句? [关闭]
【发布时间】:2013-06-24 06:25:16
【问题描述】:

我有一个类似List&lt;object&gt; 的代码部分:

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;

我在 javascript 部分使用List&lt;object&gt;

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;
          }

我在 html 中使用这个值。

如何为List&lt;object&gt;()值添加一些语句?

【问题讨论】:

  • 这里的“一些陈述”真的一点都不清楚。
  • Bip,我想你应该先阅读这篇文章"Writing the perfect question" by Jon Skeet
  • 您的要求不清楚。无论如何,我猜你的问题是你用匿名类填充对象列表,然后尝试从列表中的元素中读取 a、b 和 c 失败。您应该使用具有属性 a、b 和 c 的命名类(例如结果),并使用结果列表。

标签: c# asp.net sql list


【解决方案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
            });

【讨论】:

  • IsNullOrEmpty 覆盖 a=="" 所以你不需要两者。 or 也不起作用,您需要 | 或 ||
【解决方案2】:

如果我正确理解您想要对运行时类型进行条件初始化,在将其添加到列表之前。

所以你可以创建一个函数:

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)); 
    .....
}

如果这不是您的要求,请澄清。

【讨论】:

  • 为什么不只是{a=rd[0] == "" ? "5" : rd[0], b=..
  • @ConradFrix:我只想清楚地表达我所说的。如何写取决于OP。是的,在这种具体情况下,它可以在没有任何功能的情况下完成。但是,由于我不清楚,OP 要求 真正 是什么,所以更喜欢更通用的(如果你愿意的话,概念)解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2017-01-09
  • 1970-01-01
相关资源
最近更新 更多