在List <object> </object>上的group by后面有子句

时间:2013-05-03 13:39:51

标签: c# linq

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组的一部分。

1 个答案:

答案 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代替。