我正在使用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 :(得分:2)
这部分:
.Union(Enumerable.Range(0, 4).Select(x => string.Empty).ToArray())
毫无意义。它只返回一个string.Empty
。因为Union
删除了重复项。我认为您需要Concat
代替。但是,您也可以将Enumerable.Range
替换为Enumerable.Repeat
var textValues = stats
.Select((v, i) => v ? footerValues[i] : null).OfType<string>()
.Concat(Enumerable.Repeat(string.Empty, 4))
.Take(4)
.ToArray();