使用LINQ循环遍历数组的每个索引并绑定到数据源

使用LINQ循环遍历数组的每个索引并绑定到数据源,linq,list,loops,indexing,datasource,Linq,List,Loops,Indexing,Datasource,下面的代码工作正常,但它只将最后一个索引[]写入数据源。我很难找到一种优雅的方法来循环遍历每个索引并将其添加/附加到var mydata中。这是一个动态查询,有些可能没有索引,有些可能有5个或更多 我期望的结果如下所示: 细节视图1 服务器名称:服务器1、服务器2、服务器3 服务器IP:IP1、IP2、IP3 服务器状态:状态1、状态2、状态3 我也在寻找其他建议的方法,我仍然是这个编码方面的n00b:) 例如: if (result.Server.servicename !=null &

下面的代码工作正常,但它只将最后一个索引[]写入数据源。我很难找到一种优雅的方法来循环遍历每个索引并将其添加/附加到var mydata中。这是一个动态查询,有些可能没有索引,有些可能有5个或更多

我期望的结果如下所示:

细节视图1

服务器名称:服务器1、服务器2、服务器3 服务器IP:IP1、IP2、IP3 服务器状态:状态1、状态2、状态3

我也在寻找其他建议的方法,我仍然是这个编码方面的n00b:)

例如:

if (result.Server.servicename !=null && result.Server.servicename.Length > 0)
                    {
                        foreach (string str in result.Server.servicename)
                        {
                            List<NetScalerResult> res = new NetScalerService(env).GetService(str);

                        var mydata = from r in res
                                     select new
                                     {
                                         Name = r.Services.name,
                                         ServerName = r.Services.servername,
                                         ServerIP = r.Services.ipaddress,
                                         ServerState = r.Services.svrstate,
                                         Port = r.Services.port,
                                         ServiceType = r.Services.servicetype,
                                         ClientTimeout = r.Services.clttimeout,
                                         ServerTimeout = r.Services.svrtimeout
                                     };

                        DetailsView1.DataSource = mydata;
                        DetailsView1.DataBind();
                    }
                }
if(result.Server.servicename!=null&&result.Server.servicename.Length>0)
{
foreach(result.Server.servicename中的字符串str)
{
List res=newnetscalerservice(env).GetService(str);
var mydata=从r到res
选择新的
{
Name=r.Services.Name,
ServerName=r.Services.ServerName,
ServerIP=r.Services.ipaddress,
ServerState=r.Services.svrstate,
端口=r.Services.Port,
ServiceType=r.Services.ServiceType,
ClientTimeout=r.Services.clttimeout,
ServerTimeout=r.Services.svrtimeout
};
DetailsView1.DataSource=mydata;
DetailsView1.DataBind();
}
}
谢谢!!
大卫我不太明白这个问题。但看起来您是foreach循环中的数据绑定,这实际上覆盖了上一次迭代中的数据绑定。因此,最后只剩下最后一个条目是数据绑定


解决这个问题的一个简单方法是将MyData收集到列表中,然后将该列表绑定到数据。

将MyData收集到列表中的最佳方法是什么?谢谢你的帮助@tunedportcj5:如果mydata可以有多个条目,请使用
list.AddRange(mydata)。否则,将其放入一个单变量中,即
var mydata=(query).single()然后使用
list.Add(mydata)。在循环之外,您需要一个适当的列表结构,即
var list=new list()。然后将数据绑定移出循环。当然,DetailsView也需要理解这个新列表-我不知道,你对此有什么样的模式。@tunedportcj5:但也许我误解了你的问题。我不太明白,如何通过使用该查询获得所需的输出。@tunedportcj5:试着用普通foreach语句写出您想要达到的效果。这样就更容易看到你真正想要实现的目标。我怀疑,LINQ不是解决这个问题的方法(可读性方面)