I have a self referencing table “Product” with the following structure (where D = Draft and A = Approved)
ID ParentID Status Name
---------------------------
1 NULL A Foo
2 1 A Foo2
3 NULL D Bar
4 1 D Foo3
A row can either be “new” (where ParentID == null) or can be a version of an existing row. So we can see from the table that there are 3 versions for the item “Foo” and only 1 for “Bar”.
I need a way of returning the latest versions of each item based on whether the user is able to see only “Approved” items or is able to see “Draft” as well. So for example
Users who can see “D” would have:
3 NULL D
4 1 D
The “latest” row for “Foo” and “Bar”.
Users who can see “A” would have:
2 1 A
ie. only the “Approved” versions.
Thanks in advance,
Jose
Here is the Linq query that should work for you:
Here’s what’s happening:
I should note that if you have the ability to change your data schema you should consider adding a column called InsertDate or something to that effect. Right now I am assuming that whatever record has the highest ID is the latest. It is often better to add a DateTime field and sort on that instead.
I apologize that this isn’t actually using Linq syntax–I prefer fluent coding styles–but it could be easily translated to Linq syntax if you preferred it.