将空值作为字符串传递

时间:2014-06-30 13:31:41

标签: c# .net string linq

我有以下可怕的代码:

CurrentInvoice = invoiceTable.AsEnumerable()
                    .First().ItemArray
                    .Where(a == null, a = (int a).Tostring("null"))
                    .Select(i => i.ToString())
                    .ToArray();

我试图使用" Where"将任何空值传递为读取" null"的物理字符串的方法,而不会破坏该行的其余部分。我是否会使用" Where"方法

3 个答案:

答案 0 :(得分:4)

Where语句过滤数组,但您需要对每个单元格进行转换,这是一个Select语句。

您需要.Select(a => a ?? "null")而不是我认为的Where吗?

答案 1 :(得分:2)

我不明白你真正要求的是什么,但也许你需要这样的东西:

CurrentInvoice = invoiceTable.AsEnumerable()
                    .First().ItemArray
                    .Select(x => x == null ? "null" : x) //or x ?? "null" for more info check the null coalescing operator
                    .ToArray();

所以你"转换"从null"null"的字符串。如您所见,您不需要使用ItemArray语句过滤Where()

答案 2 :(得分:1)

我认为你通过尝试在这里使用LINQ来使它过于复杂;这看起来像DataTable的第一行,在这种情况下:

object[] arr = invoiceTable.Rows[0].ItemArray;
for(int i = 0 ; i < arr.Length ; i++) {
    if(arr[i] == null || arr[i] is DBNull) arr[i] = "null";
}

这更容易编写,更容易理解,也更有效。

编辑:如果最终结果是(评论)意图是string[],那么:

object[] arr = invoiceTable.Rows[0].ItemArray;
string[] result = Array.ConvertAll(arr,
    val => (val == null || val is DBNull) ? "null" : val.ToString());