如何从表中跳过重复的id并使用linq进行选择

本文关键字:id linq 选择 行选 | 更新日期: 2023-09-27 17:59:22

在一个表中,我有以下内容,

GroupId3786378737883788

所以我只需要带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

在那个JOIN join pcs in this.UnitOfWork.Repository<ProductCarrierScore>().Queryable() on p.ProductGroupID equals pg.ProductGroupID里面,这里只有我必须使用这个

pg表示ProductGroupMember。在该成员中,我只能传递不重复的值。请引导我。我被卡住了

如何从表中跳过重复的id并使用linq进行选择

我会这样做:

  1. 按CCD_ 3分组
  2. 只获取组中有1个元素的

代码如下所示:var groupIds = subDetails.GroupBy(x=>x.GroupId).Where(x=>x.Count()==1).Select(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);

您也可以使用

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

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