如果添加列表为空默认的字符串(Adding a default string if list emp

2019-10-19 20:39发布

我写了状态的聚合列表。 它的工作原理,除了那里有没有的情况很好。 目前,空渲染和位置是空的。

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)

Answer 1:

你可以做这样的事情。 如果状态列表是相当小的(否则应该反正而不是字符串连接使用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 ,如果它永远不会运行。



Answer 2:

您可以使用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();


文章来源: Adding a default string if list empty