1

我想将a的值返回DataRow[]到c#中的字符串

这是我的DataTable

DataTable table = new DataTable();
            table.Columns.Add("ID", typeof(int));
            table.Columns.Add("BugDescription", typeof(string));
            table.Columns.Add("UnitPrice", typeof(double));

            table.Rows.Add(1, "Bug 1", 10.00);
            table.Rows.Add(2, "Bug 2", 20.00);

然后我创建一个DataRow[]调用result来存储 ID = 1 的行:

DataRow[] result = table.Select("ID = 1");

我想要实现的最后一步是将 BugDescription 值添加到名为description.

我将如何实现这一目标?

4

5 回答 5

2

你的代码

DataRow[] result = table.Select("ID = 1");

告诉你你有一个 DataRows 数组。现在这意味着您可能在这里拥有不止一条记录。所以,现在取决于你分配哪一行。如果您认为它将是第一个,您可以这样做

if(result.Length > 0)
{
   string description = Convert.ToString(result[0]["BugDescription"]); 
}

用 linq 的方式做

string description = table.Rows.OfType<DataRow>().Where(row => (string)row["ID"] == "1").Select(row => (string)row["BugDescription"]).First();
于 2013-08-07T14:31:33.460 回答
1

我知道我提供答案已经很晚了,但是,我们可以在答案列表中再添加一个。

由于 datatable.select 以数组的形式为我们提供结果,因此要知道我们正在为每个行数组中的列获取 itemarray。用下面的例子简化这个语句。

如果我们知道/记住/使用列位置/编号而不是列名,我们可以使用“ItemArray”

//ID   Name      Age
//100  Name 100  Age 100
//101  Name 101  Age 101
//102  Name 102  Age 102

假设单行。

DataTable dt=new DataTable();
//Assigning some data into dt. with columns ID, Name, Age. 
DataRow[] dr=dt.Select("ID=100");
string PersonID=dr[0].ItemArray[0].Tostring().trim(); //first column is ID
string PersonName=dr[0].ItemArray[1].Tostring().trim(); //second column is Name
string PersonAge=dr[0].ItemArray[2].Tostring().trim(); //third column is Age

因此变量将具有以下详细信息。

// PersonID= 100; PersonName= Name 100; PersonAge= Age 100

假设行>1(本例中为 2)

dr=dt.Select("ID>100");
string PersonID_1=dr[0].ItemArray[0].Tostring().trim(); //first column is ID
string PersonName_1=dr[0].ItemArray[1].Tostring().trim(); //second column is Name
string PersonAge_1=dr[0].ItemArray[2].Tostring().trim(); //third column is Age

string PersonID_2=dr[1].ItemArray[0].Tostring().trim(); //first column is ID
string PersonName_2=dr[1].ItemArray[1].Tostring().trim(); //second column is Name
string PersonAge_2=dr[1].ItemArray[2].Tostring().trim(); //third column is Age

因此变量将具有以下详细信息。

// PersonID_1= 101; PersonName_1= Name 101; PersonAge_1= Age 101
// PersonID_2= 102; PersonName_2= Name 102; PersonAge_2= Age 102

需要记住的一点:第一行或第一列的索引 id 总是从 0 开始。因此,dr[0] 是第一行 & ItemArray[0] 是第一列

于 2018-06-30T16:59:03.460 回答
0

如果你有一个 DataRows 数组,因为你在声明它

DataRow[]

您可以通过以下方式访问它:

string resultBug = result[0]["BugDescription"];

但是由于您只期望一行(并且您要判断是否始终期望返回一行),那么您应该将其声明为普通 DataRow:

DataRow result = table.Select("ID = 1")[0];
string resultBug = result["BugDescription"].Dump();

Select 正在返回一个行数组,因此您应该使用 [0] 对其进行索引以获得第一次出现。

于 2013-08-07T14:24:30.933 回答
0

为了实现你的目标,你需要这样的东西:

if (result.Length > 0)
{
    var description = result[0]["BugDescription"].ToString();
}
于 2013-08-07T14:26:37.197 回答
0

如果你知道你只会拿回一排,你可以把整个事情浓缩成这个

string description = table.Select("ID = 1").First().Field<string>("BugDescription");
于 2013-08-07T14:26:47.660 回答