将数据表逗号分隔值放在字符串中

时间:2011-02-04 13:03:15

标签: c# asp.net

我的数据表包含一个名为“ID”的列。没有。此列中的值有所不同。有时,此数据表在该ID列中提取3个ID,有时为2。 现在,例如,我的数据表有三个值为1,2,3。我想要的是将这三个值放在一个字符串中,并用逗号分隔它们: -

string test= "1,2,3";

如果Datatable有2个值,则string应如下所示: -

string test= "1,2";

我确实尝试但是徒劳无功。请帮忙。感谢。

修改: -

DataTable dt=new DataTable;
 dt = obj.GetIDs();

                for (int i = 0; i < dt.Rows.Count; i++)
                { 
                string test= "What should be here????";
                }

编辑2

 foreach(DataRow dr in dt.Rows)
            {
                string str = str + "," + Convert.ToString(dr("ID"));

            }

@Rajeev ::尝试过这个..它说dr是一个变量但是用作方法。怎么了?

6 个答案:

答案 0 :(得分:15)

使用 LINQ 只需一个班轮。

String result = table.AsEnumerable()
                     .Select(row => row["ID"].ToString())
                     .Aggregate((s1, s2) => String.Concat(s1, "," + s2));

答案 1 :(得分:5)

使用linq,这样做:

var idlist = table.AsEnumerable().Select( r => r.Field<string>("ID")).ToArray();
string result = string.Join(",", idlist);

这个修复了你的最后一个例子

foreach(DataRow dr in dt.Rows)
{
   string str = str + "," + Convert.ToString(dr["ID"]);
}

您的问题是您尝试拨打dr("ID"),但是dr不是您的语法隐含的方法。请使用dr["ID"]来获取行的ID列。

然而,最后一种方法也会给出结果“,1,2,3”,所以你最好像这样重写它(或使用我的LINQ变体):

List<string> myIds = new List<string>();
foreach(DataRow dr in dt.Rows)
{
   myIds.Add( Convert.ToString(dr["ID"]));
}
string result = string.Join(",", myIds);

答案 2 :(得分:5)

这样的事情:

DataTable dt = new DataTable();

string output;
for (int i = 0; i < dt.Rows.Count; i++)
{
    output = output + dt.Rows[i]["ID"].ToString();
    output += (i < dt.Rows.Count) ? "," : string.Empty;
}

答案 3 :(得分:1)

如何使用Linq在ASP.NET C#中将数据表列添加到逗号分隔字符串(CSV)。

选项1:

string commaSeparatedString = String.Join(",", ds.Tables[0].AsEnumerable().Select(x => x.Field<int>("Data Table Column ID").ToString()).ToArray());

选项2:

var SelectedValues = ds.Tables[0].AsEnumerable().Select(s => s.Field<int>("Data Table Column ID")).ToArray();
string commaSeperatedValues = string.Join(",", SelectedValues);

注意:请导入包using System.Linq;

答案 4 :(得分:0)

如果我理解正确,你有一个数据表,它有n行和1列(ID,即)。

如果dt是Datatable,那么你可以遍历行集合,如:

For Each dr as DataRow in dt.Rows
  str = str + "," + Convert.ToString(dr("ID"))
Next

这对你有用吗?

答案 5 :(得分:0)

我们还可以使用以下代码来实现这一目标。

这是我的数据表

DataTable OpDtA​​dPortalProcessReport = new DataTable();

        OpDtAdPortalProcessReport.Columns.Add("Process Name");
        OpDtAdPortalProcessReport.Columns.Add("Processed On");
        OpDtAdPortalProcessReport.Columns.Add("Status");
        OpDtAdPortalProcessReport.Columns.Add("Comments");

        OpDtAdPortalProcessReport.Rows.Add("7 Miles", "", "gray", "");
        OpDtAdPortalProcessReport.Rows.Add("Active", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
        OpDtAdPortalProcessReport.Rows.Add("BMW", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
        OpDtAdPortalProcessReport.Rows.Add("Eicoff", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
        OpDtAdPortalProcessReport.Rows.Add("Volkswagen", "", "gray", "");
        OpDtAdPortalProcessReport.Rows.Add("Universal", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "orange", "Bot/Script failed to be Executed because of some server issue.");

        Processname = String.Join(",", OpDtAdPortalProcessReport.Rows.Cast<DataRow>().Where(x => x["Status"].ToString().Contains("green")).ToList<DataRow>().Select(c=> c["Process Name"].ToString()));