我写了状态的聚合列表。 它的工作原理,除了那里有没有的情况很好。 目前,空渲染和位置是空的。
item.Stuff.Where(e => Condition(e))
.Select(f => f.Status)
.Aggregate(String.Empty, (a, b) => a + b)
现在,我想用“---”万一列表过滤缩小为条件的空单来填充表元素,但我不能对方法决定。
这将是一个平滑的方式来处理呢?
我已经试过类似下面的暴行,但它看起来,嗯......,残暴,它不会呈现,但无论。 我能看到的,而不是值实际的源代码行(通过虚假或真实开头)。
item.Stuff.Where(e => Condition(e)).Count() < 1
? "---"
: item.Stuff.Where(e => Condition(e))
.Select(f => f.Status)
.Aggregate(String.Empty, (a, b) => a + b)
你可以做这样的事情。 如果状态列表是相当小的(否则应该反正而不是字符串连接使用StringBuilder)。
item.Stuff.Where(e => Condition(e))
.Select(f => f.Status)
.Aggregate("---", (a, b) => (a == "---") ? b : (a + b));
它检查如果默认的文本被替换,如果它是,它加到下一个状态元素已经存在的文本质量。
这将返回“---”当且仅当它从来没有进行评估,也就是说,如果该列表是空的。 否则,一个人会得到相同的结果之前。
如果Status
是一个枚举,而你只需要在不同的状态,您可以使用[国旗]属性的行为。
如果你这样定义枚举
[Flags]
enum Status
{
None = 0,
Active = 1,
Inactive = 2,
Pending = 4,
Deleted = 8
...
}
你可以这样做:
item.Stuff.Where(e => Condition(e))
.Aggregate(Status.None, (a, b) => a | b)
其结果是,出现在列表中的所有状态的集合,并且输出格式良好的列表( Active, Inactive, Pending
)或None
,如果它永远不会运行。
您可以使用DefaultIfEmpty(string.Empty).First();
MSDN
例
var item = item.Stuff.Where(e => Condition(e))
.Select(f => f.Status)
.Aggregate(String.Empty, (a, b) => a + b);
var newitem = item.DefaultIfEmpty(new Item() { i = 1, Status = "---" }).First();