是一个条件string.join <object>来自DataRow比string.replace?</object>更有效

时间:2013-04-28 19:55:23

标签: c# string datatable dataset datarow

这是我的工作代码:

DataSet myDataSet = new DataSet();
mySqlDataAdapter.Fill(myDataSet);
DataTable positionData = myDataSet.Tables["Table"];
if (siteData.Rows.Count > 0)
{
    positionDV = string.Join<object>(", ",
        from r in siteData.Rows.OfType<DataRow>() select r[1]);
}
else
{
    positionDV = "";
}

positionDV的内容看起来像“14,47,5,11”等,其中数据库中的每个NULL值都有一个空格。

我想要实现的是,NULL值实际上是以NULL形式写入字符串的。所以上面的例子看起来像“14,47,5,null,11”。

为了简洁起见,positionDV只是一个字符串,实际上每个数据集有几十个,每个数据都接近100,000个。

我正在寻找的是一种插入null而不是空格的方法。在string.Join中创建条件会更有效吗(如果是这样,我该怎么做?),或者按原样创建字符串然后创建一个单独的赋值来更高效这样:

positionDV += positionDV.replace(", ,", ", null,");

1 个答案:

答案 0 :(得分:1)

只需使用Enumerable.SelectDataRow.Field支持可空类型。然后你可以使用条件运算符(?:)来获取int值作为字符串或“null”如果它是空/ null:

IEnumerable<int?> positionValues = myDataSet.Tables["Table"].AsEnumerable()
    .Select(r => r.Field<int?>(1));
IEnumerable<string> positions = positionValues 
    .Select(v => v.HasValue ? v.Value.ToString() : "null");
string positionDV = string.Join(", ", positions);