C# 在列表中的group by后面有子句<;对象>; 公共类注册表项 { public int Root{get;set;}//假定可能的值为0,1,2,3 公共字符串名称{get;set;} 公共字符串组件{get;set;} } 列出all_RegistryTable_items=//假设您在其中有数据; var result=来自MSReader中的注册表项。\u所有\u注册表项\u 按regitems.Component_u3;对regitems进行分组; 具有(根==1 | |根==3)和&(根==0 | |根==2)//修这条线

C# 在列表中的group by后面有子句<;对象>; 公共类注册表项 { public int Root{get;set;}//假定可能的值为0,1,2,3 公共字符串名称{get;set;} 公共字符串组件{get;set;} } 列出all_RegistryTable_items=//假设您在其中有数据; var result=来自MSReader中的注册表项。\u所有\u注册表项\u 按regitems.Component_u3;对regitems进行分组; 具有(根==1 | |根==3)和&(根==0 | |根==2)//修这条线,c#,linq,C#,Linq,规则是每个Componentgroup中的rootcolumn值应为0,2或1,3(只有这些组合是有效的组)。我想要不通过此规则的项目 例如:如果组件_x具有不同根值为1,0或2,3或1,2,3等的RegistryTableItems,则应包含在结果中,因为它们不是有效2组的一部分 试试这个: public class RegistryTableItem { public int Root { get; set; }//assume possible values are 0,1

规则是每个Componentgroup中的rootcolumn值应为0,2或1,3(只有这些组合是有效的组)。我想要不通过此规则的项目

例如:如果组件_x具有不同根值为1,0或2,3或1,2,3等的RegistryTableItems,则应包含在结果中,因为它们不是有效2组的一部分

试试这个:

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

注意:Linq中没有直接的
子句,您应该使用
where

不清楚您的意思。您是按组件分组的-一个组没有单个根值,它有许多RegistryTableItem值。如果你能更清楚地表达你的需求,我相信用
where
子句来表达是可行的。理想情况下,显示示例输入和所需输出。作为旁白:“规则是每个Componentgroup中的rootcolumn值应为0,2或1,3…”您需要更改代码中靠近
having
语句的逻辑,以符合该要求。感谢@Alex提供的解决方案。但如前所述,我想要“不通过此规则的项目”。我可以直接使用LINQ查询获得它吗?@dasariramacharanprasad,请检查更新的代码是否解决了您的问题。谢谢@Alex这是一个很好的解决方案!
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;