public class RegistryTableItem
{
public int Root { get; set; }//assume possible values are 0,1,2,3
public string Name { get; set; }
public string Component_ { get; set; }
}
List<RegistryTableItem> _all_RegistryTable_items = //assume you have data in this;
var result= from regitems in MsiReader._all_RegistryTable_items
group regitems by regitems.Component_;
having (root==1 || root==3) && (root==0 || root==2);//fix this line
规则是每个Componentgroup中的rootcolumn值应为0,2或1,3(只有这些组合是有效组)。我想要不通过这条规则的物品。
例如:如果component_x具有不同根值为1,0或2,3或1,2,3等的RegistryTableItems,则它应该出现在结果中,因为它们不是有效2组的一部分。
答案 0 :(得分:1)
试试这个:
var r = from regitems in MsiReader._all_RegistryTable_items
group regitems by regitems.Component_ into groupedItems
where !(groupedItems.Select(i => i.Root).Distinct()
.OrderBy(i => i).SequenceEqual(new[] { 1, 3 })
|| groupedItems.Select(i => i.Root).Distinct()
.OrderBy(i => i).SequenceEqual(new[] { 0, 2 }))
select groupedItems;
注意:Linq中没有直接的having
子句,您应该使用where
代替。