是否可以选择数据表中的所有数据并将其存储在数组中? [英] Is it possible to select all the data in a datatable and store it in an array?

查看:67
本文介绍了是否可以选择数据表中的所有数据并将其存储在数组中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一般来说,我创建了一个访问多个服务器并从这些服务器读取数据的代码。

目前我已经从DataTables中提取了所有数据作为字符串使用ListView显示它,但我想知道是否有一种方法将数据存储在一个数组中,以便我以后可以进行基本的数学运算。



我尝试过:



 for(int i = 0; i< DataTable1.Rows.Count; i ++)
{
var resultTest = DataTable1.AsEnumerable()。选择(r => r.Field< string>(Name))。ToArray();
listView1.Items.Add(resultTest [i] .ToString());
}

解决方案

嗯。

resultTest是一个数组:你将如果你这样做,得到完全相同的结果:

 string [] resultTest = DataTable1.AsEnumerable()。选择(r => r.Field< string>(Name ))。ToArray(); 

那么为什么这会给你一个问题呢?



但请先看看你的代码:为什么你循环遍历所有行并在每次循环时转换整个DataTable,只使用一行,然后扔掉其余的?

你可以这么说:

 for(int i = 0; i< DataTable1.Rows.Count; i ++)
{
listView1.Items.Add(DataTable1.Rows [i] [ 名称]的ToString());
}

并得到相同的结果。



如果你想要一个数值的数组,那么你可以放弃循环,修改您拥有的Linq的单行和TryParse或将列解析为数字 - 但名为Name的列通常不包含数字数据!


而不是乱搞尝试快捷方式,将数据移动到对象的列表。那时,操作起来会更容易。您花了这么多时间尝试直接使用 DataTable 中的数据,而这正在让您失去方向。



  public   class  ItemList:List< MyItem> 
{
public ItemList(DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
this 。添加( new MyItem(row));
}
}
}

public class MyItem
{
// 每行列的属性都在这里

public MyItem(DataRow row)
{
// 填充行中的属性
}
}

// 用法

ItemList myItems = new ItemList( DataTable1);





如果你想得到一点点发烧友,你可以检索数据(我假设从数据库中)在List构造函数中,它将简化外向代码。


 for(int i = 0; i< DataTable1.Rows.Count; i ++) 
{
var resultTest1 = DataTabl e1.AsEnumerable()。选择(r => r.Field< string>(column Name))。ToArray();
var resultTest2 = DataTable1.AsEnumerable()。选择(r => r.Field< string>(Column Name))。ToArray();
var resultTest3 = DataTable1.AsEnumerable()。选择(r => r.Field< string>(Column Name))。ToArray();
var resultTest4 = DataTable1.AsEnumerable()。选择(r => r.Field< string>(Column Name))。ToArray();
listView1.Items.Add(resultTest1 [i] .ToString()++ resultTest2 [i] .ToString()++ resultTest3 [i] .ToString()++ resultTest4 [i]的ToString());
}





注意:

 var resultTest2 = DataTable1.AsEnumerable()。选择(r => r.Field< int?>(列名称))。ToArray(); 

读取列整数值

Generally speaking I created a code that accesses multiple servers and reads the data from those servers.
Currently I have extracted all the data as a string from the DataTables and display it using ListView, however I was wondering if there was a way to store the data in a array so that I can do basic math operations later.

What I have tried:

for (int i = 0; i < DataTable1.Rows.Count; i++)
{
    var resultTest = DataTable1.AsEnumerable().Select(r => r.Field<string>("Name")).ToArray();
    listView1.Items.Add(resultTest[i].ToString());
}

解决方案

Um.
resultTest is an array: you will get exactly the same results if you do this:

string[] resultTest = DataTable1.AsEnumerable().Select(r => r.Field<string>("Name")).ToArray();

So why is this giving you a problem?

But please, start by looking at your code: why are you looping through all rows and converting the whole DataTable each time you go round the loop, only to use a single row, and throw away the rest?
You could just say this:

for (int i = 0; i < DataTable1.Rows.Count; i++)
{
    listView1.Items.Add(DataTable1.Rows[i]["Name"].ToString());
}

and get the same results.

If you want an array of numeric values, then you can just discard the loop, modify the single line of Linq you have and TryParse or Parse the column to a number - but columns called "Name" do not generally contain numeric data!


Instead of messing around with trying to shortcut it, move the data into a List of objects. At that point, it will be easier to manipulate. You're spending so much time trying to use the data directly from a DataTable that you're loosing your way.

public class ItemList : List<MyItem>
{
    public ItemList(DataTable dt)
    {
        foreach(DataRow row in dt.Rows)
        {
            this.Add(new MyItem(row));
        }
    }
}

public class MyItem
{
    // properties for each row column go here

    public MyItem(DataRow row)
    {
        // populate the properties from the row
    }
}

// usage

ItemList myItems = new ItemList(DataTable1);



If you want to get a little fancier, you could retrieve the data (from a database, I'm assuming) in the List constructor, which would simplify the outward facing code even more.


for (int i = 0; i < DataTable1.Rows.Count; i++)
{
    var resultTest1 = DataTable1.AsEnumerable().Select(r => r.Field<string>("column Name")).ToArray();
    var resultTest2 = DataTable1.AsEnumerable().Select(r => r.Field<string>("Column Name")).ToArray();
    var resultTest3 = DataTable1.AsEnumerable().Select(r => r.Field<string>("Column Name")).ToArray();
    var resultTest4 = DataTable1.AsEnumerable().Select(r => r.Field<string>("Column Name")).ToArray();
    listView1.Items.Add(resultTest1[i].ToString() + " " + resultTest2[i].ToString() + " " + resultTest3[i].ToString() + " " + resultTest4[i].ToString());
}



Note:

var resultTest2 = DataTable1.AsEnumerable().Select(r => r.Field<int?>("Column Name")).ToArray();

read column integer values


这篇关于是否可以选择数据表中的所有数据并将其存储在数组中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆