c# - 如何查找(分组的)键的一部分是否在列表中多次出现?
问题描述
假设我想找出哪个 eprt_id 出现了两次。(在这种情况下是:20463)
Eprt_id: 21487 Perceel: Test
subject: Apples
Eprt_id: 21696 Perceel: Test2
subject: Oranges
Eprt_id: 21822 Perceel: Test3
subject: Pears
Eprt_id: 23485 Perceel: Test4
subject: Lemons
Eprt_id: 24238 Perceel: Test55
subject: Watermelons
subject: Oranges
Eprt_id: 20463 Perceel: Test56
subject: Apples
subject: Pears
Eprt_id: 20463 Perceel: Test57
subject: Apples
subject: Pears
这个列表显然是 Eprt_id 和 Perceel 上的一组。
但是我怎样才能写一个像样的 linq 语句,让我得到结果(在这种情况下) 20463 不止一次出现?
我得到这个列表如下:
var nextGroupedWorklist = from r in SubtractBSNlessFromWerklijst
where r.Eprt_id.HasValue &&
!string.IsNullOrEmpty(r.Subject_id) &&
!string.IsNullOrEmpty(r.Perceel_id) &&
!string.IsNullOrEmpty(r.Hermes_dossier_nr) &&
!string.IsNullOrEmpty(r.Gogis_perceel_nr)
group r by new { r.Eprt_id, r.Gogis_perceel_nr };
我认为一个简单的计数就可以了。但它显然会返回组元素的计数。
我找到了获得 20463 的方法。但这是最好的方法吗?
var solution = from r in nextGroupedWorklist
group r by new { r.Key.Eprt_id }
into grp
where grp.Count() > 1
select grp;
其次,有没有一种聪明的方法来检查两个主题是否相同?(如示例中所示)两个 20463 eprt_id 都包含主题:Apples and Pears。这是一个示例列表(如您所见,每个 20463 在 2 个不同的 Perceel 列中都有两个相同的主题)所以这就是我要检查的内容。如果两者相同。我可以继续处理 20463。否则不会。:
Eprt_id: 20229 Perceel: WPK02L1072G0 subject: NL.KAD.Persoon.255545276
Eprt_id: 20267 Perceel: WPK02L1051G0 subject: NL.KAD.Persoon.255545276
Eprt_id: 20463 Perceel: ASD31AL2317G0 subject: NL.KAD.Persoon.170412796
Eprt_id: 20463 Perceel: ASD31AL2317G0 subject: NL.KAD.Persoon.455686300
Eprt_id: 20463 Perceel: ASD31AL3076G0 subject: NL.KAD.Persoon.170412796
Eprt_id: 20463 Perceel: ASD31AL3076G0 subject: NL.KAD.Persoon.455686300
Eprt_id: 20524 Perceel: ASD31AL952G0 subject: NL.KAD.Persoon.170348494
Eprt_id: 20524 Perceel: ASD31AL952G0 subject: NL.KAD.Persoon.171028089
Eprt_id: 20939 Perceel: WPK02L260G0 subject: NL.KAD.Persoon.171510661
Eprt_id: 20939 Perceel: WPK02L260G0 subject: NL.KAD.Persoon.171510669
Eprt_id: 20944 Perceel: WPK02L6672G0 subject: NL.KAD.Persoon.171510661
Eprt_id: 20944 Perceel: WPK02L6672G0 subject: NL.KAD.Persoon.171510669
Eprt_id: 21487 Perceel: WPK02L2503G0 subject: NL.KAD.Persoon.170459916
Eprt_id: 21696 Perceel: ASD02A7343A61 subject: NL.KAD.Persoon.171440573
Eprt_id: 21822 Perceel: WPK02L1602G0 subject: NL.KAD.Persoon.459669099
解决方案
List<(int eprt, int count)> duplicates = SubtractBSNlessFromWerklijst
.Where( r => r.Eprt_id.HasValue )
.GroupBy( r => r.Eprt_id.Value )
.Where( grp => grp.Count() > 1 )
.Select( grp => ( eprt: grp.Key, count: grp.Count() ) )
.ToList();
这将为您提供以下输出:
[
( eprt: 20463, count: 2 )
]
其次,有没有一种聪明的方法来检查两个主题是否相同?
我们无法帮助您,因为您还没有发布任何类型的定义subject
。您的示例输入数据没有解释对象图的结构。
推荐阅读
- javascript - 更新后 Eclipse Javascript 语法突出显示损坏?
- karate - 如何在 Test Suite Setup/Teardown 上执行某些操作?
- android - 尝试从 Android Studio 运行应用程序时出现“未知来源”错误
- linux - 如何将多个 png 转换为一个 DICOM?图像魔术师?
- javascript - truncation of text and 'show more' text
- javascript - 使用 jQuery 查找 HTML 元素 IMG(如果存在)?
- c++ - C++ 枚举模板函数:编译时反射
- flutter - 如何解决异常:Gradle 任务 assembleDebug 失败,退出代码为 1
- java - 线程“主”java.lang.VerifyError 中的异常:JVMVRFY012 堆栈形状不一致;类=org/bouncycastle/openssl/PEMReader$ECDSAKeyPairParser,
- postgresql - 表相互引用解决方法