2014-09-12 56 views
0

我正在使用rdlc報告頁腳位置需要停留在底部,但四個表格頁腳可見性取決於特定條件。準備默認新行作爲空值替換

爲此,我使用Union並使用Take(4)來確定是否有任何表格頁腳不可見,因此應在底部替換爲\r\n

應該是:

12345 
\r\n 
\r\n 
\r\n 

不喜歡這樣的:

\r\n 
\r\n 
\r\n 
12345 

這裏是我的代碼。

var footerValues = new[] 
{ 
    salesOrder.Subtotal.ToString("N0"), 
    salesOrder.Discount.ToString("N0"), 
    salesOrder.PPN.ToString("N0"), 
    salesOrder.Total.ToString("N0") 
}; 
var stats = new[] { 
    salesOrder.Discount >= 1 || salesOrder.PPN >= 1, // combined visibility 
    salesOrder.Discount >= 1, // visible only if the value >= 1 
    salesOrder.PPN >= 1, // visible only if the value >= 1 
    true // total always visible 
}; 
var textValues = stats 
    .Select((v, i) => v ? footerValues[i] : null).OfType<string>() 
    .Union(Enumerable.Range(0, 4).Select(x => string.Empty).ToArray()) 
    .Take(4) 
    .ToArray() 
var footerValue = string.Join(Environment.NewLine, textValues); 

如果統計生產

false, false, false, true 

預期footerValue

"12345\r\n\r\n\r\n\r\n" 

但實際的結果是

"12345\r\n" 

有什麼不好的代碼?還是可以簡化?

+0

'.Union更換Enumerable.Range(Enumerable.Range(0,4)。選擇(X =>的String.Empty).ToArray())'是毫無意義的。它只會返回一個字符串.Empty。 – 2014-09-12 16:56:16

回答

2

這一部分:

.Union(Enumerable.Range(0, 4).Select(x => string.Empty).ToArray()) 

是毫無意義的。它只會返回一個string.Empty。因爲Union刪除重複項。我想你想Concat instead.Btw,你也可以用Enumerable.Repeat

var textValues = stats 
.Select((v, i) => v ? footerValues[i] : null).OfType<string>() 
.Concat(Enumerable.Repeat(string.Empty, 4)) 
.Take(4) 
.ToArray(); 
+0

,就像一個神奇的作品,謝謝,'重複'部分也使代碼更簡單,非常感謝 – 2014-09-12 17:00:19