我有以下可怕的代码:
CurrentInvoice = invoiceTable.AsEnumerable()
.First().ItemArray
.Where(a == null, a = (int a).Tostring("null"))
.Select(i => i.ToString())
.ToArray();
我试图使用" Where"将任何空值传递为读取" null"的物理字符串的方法,而不会破坏该行的其余部分。我是否会使用" Where"方法
答案 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());