I have a list of data like so:
ID AddressPurpose Address ...
1 L
1 P
2 L
2 P
3 P
3 L
4 P
4 L
5 P
6 L
I want to be able to filter the data so that for each unique number if there is a P row then it is returned else the L row is returned. So the data will look like this:
ID AddressPurpose Address ...
1 P
2 P
3 P
4 P
5 P
6 L
At the moment I have this query which works fine:
var query = from c in list
orderby c.AddressPurpose descending
group c by c.ID
into g
select g;
var finalList = new List<Company>();
foreach (var list in query)
{
finalList.Add(list.First());
}
return finalList;
Is there a better way to do this without using the extra foreach?
You could always nest your queries:
var query =
from i in (
from c in list
orderby c.AddressPurpose descending
group c by c.ID into g
select g)
select i.First();
return query;
I'm sure this isn't the only way to do it (or possibly even the best), but it does wrap your "foreach" up into the one query.
Edit
In fact, you can simplify this down to:
var query = from c in list
orderby c.AddressPurpose descending
group c by c.ID into g
select g.First();
That seems to give the right result.
Why don't you select
g.First()
instead?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With