C# 如何使用linq从表中跳过重复ID并选择剩余ID

C# 如何使用linq从表中跳过重复ID并选择剩余ID,c#,mysql,linq,C#,Mysql,Linq,在一张表格中,我有以下内容: GroupId 3786 3787 3788 3788 所以我只需要带37863787号身份证。如果我使用distinct()也需要3788。我不知道在linq中应该使用哪种方法 IQueryable<Sub> subDetails= from carSub in this.UnitOfWork.Repository<CarSub>().Queryable() //from pcs in

在一张表格中,我有以下内容:

GroupId 3786 3787 3788 3788

所以我只需要带37863787号身份证。如果我使用
distinct()
也需要3788。我不知道在linq中应该使用哪种方法

IQueryable<Sub> subDetails=
            from carSub in this.UnitOfWork.Repository<CarSub>().Queryable()
                //from pcs in carSub.ConfirmedCarrier.CarrierCandidate.ProductCarrierScores
            join p in this.UnitOfWork.Repository<ProductGroup>().Queryable() on carSub.Submission.PlacementID equals p.PlacementID
            join pg in this.UnitOfWork.Repository<ProductGroupMember>().Queryable() on p.ProductGroupID equals pg.ProductGroupID
            join pcs in this.UnitOfWork.Repository<ProductCarrierScore>().Queryable() on p.ProductGroupID equals pg.ProductGroupID
IQueryable子详细信息=
来自此.UnitOfWork.Repository()中的carSub.Queryable()
//来自carSub.ConfirmedCarrier.CarrierCandidate.ProductCarrierCores中的PC
在carSub.Submission.PlacementID等于p.PlacementID的.UnitOfWork.Repository().Queryable()中加入p
在p.ProductGroupID上的.UnitOfWork.Repository().Queryable()中加入pg等于pg.ProductGroupID
在p.ProductGroupID等于pg.ProductGroupID的.UnitOfWork.Repository()上加入PC
在这个连接中,
在p.ProductGroupID等于pg.ProductGroupID的.UnitOfWork.Repository().Queryable()中连接PC


pg是指ProductGroupMember。在该成员中,我必须仅传递不重复的值。请引导我。我被卡住了

我想这样做:

  • GroupId
    对它们进行分组
  • 仅获取组中有1个元素的元素 代码如下所示:
    var groupIds=subDetails.GroupBy(x=>x.GroupId)。其中(x=>x.Count()==1)。选择(x=>x.Key)


    另外,可能还有其他更快的解决方案,但这是我首先想到的。

    我会这样做:

  • GroupId
    对它们进行分组
  • 仅获取组中有1个元素的元素 代码如下所示:
    var groupIds=subDetails.GroupBy(x=>x.GroupId)。其中(x=>x.Count()==1)。选择(x=>x.Key)


    另外,可能还有其他更快的解决方案,但首先想到的是这一点。

    您可以分组,然后将结果缩小到计数小于2的项目

    比如说,

    var ids = new List<int> {1, 2, 3, 2, 5, 3, 4};
    
    var itemsNotDuplicate = ids.GroupBy(f => f, t => t, 
              (k, items) => new {val = k, count = items.Count()}).Where(g => g.count < 2);
    
    varids=新列表{1,2,3,2,5,3,4};
    var itemsNotDuplicate=ids.GroupBy(f=>f,t=>t,
    (k,items)=>new{val=k,count=items.count()});
    
    您可以按分组,然后将结果缩小到计数小于2的项目

    比如说,

    var ids = new List<int> {1, 2, 3, 2, 5, 3, 4};
    
    var itemsNotDuplicate = ids.GroupBy(f => f, t => t, 
              (k, items) => new {val = k, count = items.Count()}).Where(g => g.count < 2);
    
    varids=新列表{1,2,3,2,5,3,4};
    var itemsNotDuplicate=ids.GroupBy(f=>f,t=>t,
    (k,items)=>new{val=k,count=items.count()});
    
    您也可以随身携带

    var list = new List<int> { 3786, 3787, 3788, 3788};
    var onlyOne=list.TakeWhile(t=> list.Count(l=>l==t)==1);
    
    var list=新列表{3786378737883788};
    var onlyOne=list.TakeWhile(t=>list.Count(l=>l==t)==1);
    

    这与使用GroupBy的方法类似,但您只需要使用一个lambda表达式

    你也可以随身携带

    var list = new List<int> { 3786, 3787, 3788, 3788};
    var onlyOne=list.TakeWhile(t=> list.Count(l=>l==t)==1);
    
    var list=新列表{3786378737883788};
    var onlyOne=list.TakeWhile(t=>list.Count(l=>l==t)==1);
    

    这与使用GroupBy的方法类似,但您只需要使用一个lambda表达式

    因此,如果ID像
    123434567
    ,你想取
    4567
    还是
    1234567
    ,还是
    12457
    ?那么如果ID像
    1234567
    ,你想取
    4567
    还是
    1234567