Как использовать динамическую переменную OrderBy с анонимным типом? - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть несколько сайтов и загружаю статьи на главной странице.Я могу установить рейтинг статей, чтобы они отображались в другом порядке, но порядок их размещения на разных сайтах статей может быть разным.

Код, который я должен заказать, устанавливает одинаковый порядок для всех сайтов:

    string officeLocation = "";
    // office location could be either World, Europe, Africa, America, Asia, Pacific

    var result = articles.Select(a => new
    {
        Title = a.Title,
        Url = a[SPBuiltInFieldId.FileRef],
        Byline = a[Constants.FieldNames.Byline],
        ArticleDate = a[Constants.FieldNames.ArticleStartDate],
        RankWorld = a[Constants.FieldNames.World],
        RankEurope = a[Constants.FieldNames.RankEurope],
        RankAfrica = a[Constants.FieldNames.RankAfrica],
        RankAmerica = a[Constants.FieldNames.RankAmerica],
        RankAsia = a[Constants.FieldNames.RankAsia],
        RankPacific = a[Constants.FieldNames.RankPacific],
    });

    rptArticles.DataSource = result.OrderBy(a => a.RankWorld);
    rptArticles.DataBind();

Код устанавливает все ранжирование на значение RankWorld (1-6).

Если строка officeLocation (которая передается методу) - это Европа, тогда я хочузаказ на a.RankEurope, если officeLocation - Азия, заказ на a.RankAsia и т. д.

Как мне лучше всего этого добиться (.NET 3.5)?

Заранее спасибо.

1 Ответ

2 голосов
/ 24 ноября 2011

Предполагая, что у вас есть фиксированный набор местоположений (который по определению вы должны иметь, как вы указали их в анонимном типе), тогда вы можете просто использовать переключатель:нужно решить, как лучше всего обработать неожиданное местоположение.

Обратите внимание, что в идеале я бы просто назначил функцию OrderBy для Func<T,R>, но имел бы только один вызов OrderBy, но выне может сделать это здесь из-за анонимного типа.

...