我的数据表包含一个名为“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是一个变量但是用作方法。怎么了?
答案 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 OpDtAdPortalProcessReport = 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()));