2012-03-27 175 views
2

我不知道如何將這篇文章的標題詞組化。這是我想要做的:LINQ .Select()訪問父屬性?

invalidItems.AddRange(documents.SelectMany(doc => doc.Messages) 
      .Select(message => string.Format("Doc. Key {0}: {1}", doc.ID, message))); 

其中invalidItems是一個List和Document是一個包含一個名爲消息的List屬性的類。

我想得到一個所有文檔的消息(字符串)的平坦列表,其中字符串被格式化爲包含文檔ID(類似於上面的String.Format())。有沒有辦法做到這一點?

當我與最後。選擇()子句中的消息參數的工作,我無法在父文件訪問任何...

回答

1

你只需要選擇子句移動到喜歡你的條款的SelectMany這:

documents.SelectMany(
    doc => doc.Messages.Select(
     message => string.Format("Doc. Key {0}: {1}", doc.ID, message) 
    ) 
); 
+0

這做到了!感謝您的快速回復。 – lintmouse 2012-03-27 17:54:38

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) 
) 
+0

不錯,那也完全有效。我更喜歡查詢表達式語法。 – lintmouse 2012-03-27 19:17:36