我不知道该如何标出这篇文章的标题。这就是我想要做的事情:
invalidItems.AddRange(documents.SelectMany(doc => doc.Messages)
.Select(message => string.Format("Doc. Key {0}: {1}", doc.ID, message)));
其中invalidItems是List,Document是包含名为messages的List属性的类。
我想获得所有文档的消息(字符串)的平面列表,其中字符串被格式化为包含文档ID(类似于上面的String.Format())。有没有办法实现这个目标?
当我在最终的.Select()子句中使用message参数时,我无法访问父文档中的任何内容......
答案 0 :(得分:1)
您只需将select子句移动到SelectMany子句中,如下所示:
documents.SelectMany(
doc => doc.Messages.Select(
message => string.Format("Doc. Key {0}: {1}", doc.ID, message)
)
);
答案 1 :(得分:0)
如果您想在查询中使用更多范围,可以采用查询理解语法。
from doc in documents
from message in doc.Messages
select string.Format("Doc. Key {0}: {1}", doc.ID, message)
相当于:
documents
.SelectMany(
doc => doc.Messages,
(doc, message) => new {doc, message}
)
.Select(
x => string.Format("Doc. Key {0}: {1}", x.doc.ID, x.message)
)