我有一个IEnumerable自定义对象--allBanners,其中一个属性叫做 Order ,类型为 int 。 我的用法如下:
var bannersVisibleToEveryone = allBanners
.Where(b => b.UserSegments.Contains("Everyone"))
.OrderBy(b => b.Order)
.Take(moreBanners)
.ToList();
当我检查上面一行之后的bannersVisibleToEveryone时 - 列表根本没有排序 - 它随机排序为allBanners。 这是为什么?
https://developer.wunderlist.com/documentation/concepts/authorization
屏幕截图上的编辑:看起来它是按顺序降序的(这也是错误的,因为我使用的是orderBy,而不是orderByDescending),但第四个元素的订单是350,所以它没有下降,对于误导性的截图感到抱歉。
编辑2:完整的方法定义:
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;
}
Order属性的getter:
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()
{
}
}
答案 0 :(得分:4)
解决了神秘 - 我有一个继承CitilinkModelBase基类的类HomePageBanner,并且还定义了隐藏底层类的 Order 属性。谢谢@ odyss-jii指出我正确的方向。