0

Here is my quite simple linq query in C#

var latest = (from calc in context.db_accounts_last_contacts
    group calc by calc.account_id into calcGroup
    select calcGroup);

var ordered = (from calcg in latest
    let item = (from items in calcg
        orderby items.last_contact_date descending
        select items).FirstOrDefault()
    select item);

Here is what db_accounts_last_contacts has Image

So basically my query should return this [0] should be row id 13 (because last_contact_date order in my ordered query) 1 should be row id 2 [2] should be row id 14

Basically this does work however every time I run my ordered query I will always pull out row ID 2 when I should be pulling out row ID 13,

Can anyone see why my orderby isn't being used in my ordered linq query?

Update

This is my linq query now

var ordered = (from calcg in latest
    let item = (from items in calcg
        select items).FirstOrDefault()
    orderby item.last_contact_date descending
    select item);

But I am still getting the same results

Canvas
  • 5,779
  • 9
  • 55
  • 98

1 Answers1

3

In this bit of code:

var ordered = (from calcg in latest
    let item = (from items in calcg
        orderby items.last_contact_date descending
        select items).FirstOrDefault()
    select item);

Your OrderBy is being applied before a .FirstOrDefault(), and one item is returned. I understand why that OrderBy is there; it dictates which item is selected. But that's not going to produce a final ordering; if you want the final set to be ordered, you need another OrderBy outside of the let.

Robert Harvey
  • 178,213
  • 47
  • 333
  • 501