Linq OrderBy int属性不起作用

时间:2015-10-27 08:20:12

标签: c# .net linq

我有一个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()
{

}
}

1 个答案:

答案 0 :(得分:4)

解决了神秘 - 我有一个继承CitilinkModelBase基类的类HomePageBanner,并且还定义了隐藏底层类的 Order 属性。谢谢@ odyss-jii指出我正确的方向。