将空值作为字符串传递

本文关键字:字符串 空值 | 更新日期: 2023-09-27 18:10:45

我有以下可怕的代码:

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

我试图使用"Where"方法来传递任何空值作为读取"null"的物理字符串,而不会破坏行的其余部分。我将得到任何地方使用"Where"方法吗?

将空值作为字符串传递

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

你需要像.Select(a => a ?? "null")这样的东西,而不是我认为的Where ?

我不明白你到底想要什么,但也许你需要这样的东西:

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"。如您所见,您不需要通过使用Where()语句来过滤ItemArray

我认为你在这里试图使用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());