LINQ .Select()访问父属性?

时间:2012-03-27 17:35:59

标签: linq select

我不知道该如何标出这篇文章的标题。这就是我想要做的事情:

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参数时,我无法访问父文档中的任何内容......

2 个答案:

答案 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)
)