我有一個類的分組與過濾...LINQ查詢的特殊羣體
class Document
{
public int GroupID { get; set; }
public bool Valid { get; set; }
// more
}
...和實例的列表:IEnumerable<Document> documents
。在通過此列表逐個對象地運行這些文檔的第一步中,這些文檔已被驗證,這意味着:對於某些對象,屬性Valid
將是true
,對於列表中的其他對象,將爲false
。
現在,在第二步驟中我必須執行以下操作:
- 如果每文檔組標誌
Valid
(由所有文檔具有相同GroupID
定義)的至少一個文檔是false
然後設置Valid
到false
爲該組的所有文檔。
要做到這一點,我創建至今下面的代碼片段:
var q = from d in documents
group d by d.GroupID;
// q is now of type IEnumerable<IGrouping<int, Document>>
foreach (var dg in q) // dg = "document group", of type IGrouping<int, Document>
{
if (dg.Any(d => !d.Valid))
{
foreach (var d in dg)
d.Valid = false;
}
}
我相信,這不會是我想要的東西(我沒有測試到現在爲止,雖然),但不是很有效。
問:是否有改善這種代碼,尤其是移動Any
方法的語義外foreach循環「莫名其妙」到初始LINQ查詢的方式,使q
僅代表至少有一個組無效的文件? (另外我顯然對只有一個元素的組不感興趣,因爲這些組只有一個元素,所以這些組也可以被過濾掉。)
感謝您提前提出建議!
是的,我想,這正是我一直在尋找的!非常自然和直接的表述。謝謝! – Slauma 2010-11-09 17:06:32