У меня есть класс ...
class Document
{
public int GroupID { get; set; }
public bool Valid { get; set; }
// more
}
... и список экземпляров: IEnumerable
. На первом этапе, который запускает объект за объектом через этот список, эти документы были проверены, что означает: свойство Valid
будет true
для некоторых объектов и false
для других объектов в списке.
Теперь на втором этапе я должен сделать следующее:
GroupID
) флаг Допустимый
- ложный
, затем установите Действительный
на ложный
для всех документов группы. Для этого я создал пока что следующий фрагмент кода:
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
представляет только группы, в которых есть хотя бы один недопустимый документ? (Также меня явно не интересуют группы, в которых есть только один элемент, поэтому эти группы тоже можно отфильтровать.)
Заранее благодарим вас за предложения!