I have a list of objects with data. In order to analyze the data, n amount of properties must match and when they don't match, must be removed. This is regardless of the value of the properties, just that they are equal
For example:
C1 | C2 | C3 | ... |
---|---|---|---|
1 | bob | 3 | ... |
1 | bob | 3 | ... |
1 | bill | 3 | ... (this row would be removed) |
1 | bob | 10 | ... (this row would be removed) |
1 | bob | 3 | ... |
I'm somewhat stuck and keep thinking I need to brute-force this. Is there anything in linq that can help? Self intersections?
Assuming that you have an IEnumerable
called items
that contains all of your rows, and your property names are C1
, C2
, and C3
, you could use GroupBy
to do something like this:
var result = items
.GroupBy(item => (item.C1, item.C2, item.C3))
.Where(group => group.Count() > 1)
.SelectMany(group => group);
This will do the following:
.GroupBy(item => (item.C1, item.C2, item.C3))
- create groups based on the three columns that you specified - any items where the three values are the same will be grouped together.Where(group => group.Count() > 1)
- filter out any groups that only have one item.SelectMany(group => group)
- "flatten" the groups back into a single listYou may need to adjust this so that it works with the actual types you are using, but hopefully you get the general idea.