将空值作为字符串传递
本文关键字:字符串 空值 | 更新日期: 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());