如何从表中跳过重复的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。在该成员中,我只能传递不重复的值。请引导我。我被卡住了
我会这样做:
- 按CCD_ 3分组
- 只获取组中有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表达式。