I have an IEnumerable of custom objects - allBanners, one of the property is called Order and is of type int. My usage is like below:
var bannersVisibleToEveryone = allBanners
.Where(b => b.UserSegments.Contains("Everyone"))
.OrderBy(b => b.Order)
.Take(moreBanners)
.ToList();
When I inspect the bannersVisibleToEveryone after the above line - the list is not sorted at all - it is randomly sorted as the allBanners is. Why is that?

EDIT: on the screenshot it looks like it is ordered descending (which is wrong too, because I am using orderBy, not orderByDescending), but the fourth element's Order is 350, so it is not ordered descending, sorry for the misleading screenshot.
EDIT 2: Complete method definition:
public static List<T> GetBannersForCurrentUser<T>(IEnumerable<T> allBanners,
IEnumerable<string> userSegments,
int maxNumberOfBanners)
where T : ICitilinkItem
{
var filteredBanners = allBanners
.Where(b => userSegments.Any(us => b.UserSegments.Contains(us)))
.OrderBy(b => b.Order)
.Take(maxNumberOfBanners)
.ToList();
int moreBanners = maxNumberOfBanners - filteredBanners.Count;
if (moreBanners > 0 && !userSegments.Contains("Everyone"))
{
//add the banners from Everyone
var bannersVisibleToEveryone = allBanners
.Where(b => b.UserSegments.Contains("Everyone"))
.OrderBy(b => b.Order)
.Take(moreBanners)
.OrderBy(b => b.Order)
.ToList();
filteredBanners.AddRange(bannersVisibleToEveryone);
}
return filteredBanners;
}
And the getter of the Order property:
public interface ICitilinkItem
{
string Title { get; set; }
string UserSegments { get; set; }
int Order { get; set; }
}
public class CitilinkModelBase : ICitilinkItem
{
public string Title { get; set; }
public string UserSegments { get; set; }
public int Order { get; set; }
public CitilinkModelBase()
{
}
}
Mystery solved - I had a class HomePageBanner which was inheriting the CitilinkModelBase base class AND also defines an Order property which was hiding the underlying one. Thanks @odyss-jii for pointing me in the right direction.
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