我有一个自定义对象的IEnumerable - allBanners,其中一个属性被称为Order类型为int。 我的用法如下:
var bannersVisibleToEveryone = allBanners
.Where(b => b.UserSegments.Contains("Everyone"))
.OrderBy(b => b.Order)
.Take(moreBanners)
.ToList();
当我在以上代码行之后检查bannersVisibleToEveryone时,列表没有排序,它的顺序与allBanners中的顺序是随机的。 为什么会这样?
编辑: 在截图上看起来是按降序排序的(这也是错误的,因为我使用的是orderBy而不是orderByDescending),但第四个元素的Order是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()
{
}
}
Order
的 getter 是什么样子的?allBanners
的类型是什么? - odyss-jii