Хобрук: Ваш путь к мастерству в программировании

создать строку запроса, используя лямбда из списка T

у меня возникли некоторые трудности с созданием правильного выбора.

у меня есть свой собственный класс:

internal class classA{
        internal string FieldName { get; set; }
        internal string FieldValue { get; set; }
        internal bool IncludeInChecksum { get; set; }
}

то, что я пытаюсь сделать, это создать и объединить строку запроса, используя список классов сверху. для следующего объекта:

List<classA> requestParams = ...

строка запроса должна выглядеть так: a=1&b=2&c=3

упорядочено по FieldName по возрастанию

где IncludeInChecksum = истина

ИмяПоля = ЗначениеПоля

            preMD5= requestParams
                .Where(x=>x.IncludeInChecksum)
                .OrderBy(y=>y.FieldName)
                .Aggregate((i,j)=>(i.FieldName+ "=" +j.FieldValue));

вот где я застрял. заранее спасибо

11.01.2015

  • Ваше понимание того, как работает Aggregate, неверно. Вы, вероятно, просто хотите Select в конце. 11.01.2015
  • Итак, каков результат вашего кода? 11.01.2015
  • нет результата.. я не знаю, как продолжить отсюда 11.01.2015

Ответы:


1

Я попытаюсь получить все строки name=value с помощью метода Select(). А затем преобразовать результат в массив. После этого просто используйте метод String.Join(), чтобы получить желаемый результат.

Join(String, String[]) объединяет все элементы строки массив, используя указанный разделитель между каждым элементом.

var preMD5= requestParams
                    .Where(x => x.IncludeInChecksum)
                    .OrderBy(y => y.FieldName)
                    .Select(z => string.Format("{0}={1}", z.FieldName, z.FieldValue))
                    .ToArray();
preMD5 = string.Join("&", preMD5);
11.01.2015

2

Aggregate объединяет значения из разных строк. Вам нужно объединить значения из разных полей. Для этого вы используете Select:

requestParms.Where(...).OrderBy(...).Select(f=>f.FieldName+"="+f.FieldValue)

Это вернет IEnumerable из name=value строк. Вы можете использовать string.Join объединить их в одну строку.

11.01.2015

3

Я знаю, что на него ответили, но все же я хотел предоставить свое решение.

Я использовал специальный метод для создания параметра строки запроса и метод расширения для объединения всего этого.

Надеюсь это поможет.

public class classA
{
    internal string FieldName { get; set; }
    internal string FieldValue { get; set; }
    internal bool IncludeInChecksum { get; set; }

    public classA(string fieldName, string fieldValue, bool includeInChecksum)
    {
        this.FieldName = fieldName;
        this.FieldValue = fieldValue;
        this.IncludeInChecksum = includeInChecksum;
    }

    public string ToQueryString()
    {
        return string.Format("{0}={1}",
            this.FieldName,
            this.FieldValue);
    }

    public void Test()
    {
        var list = new List<classA> { 
            new classA("A", "1", true) ,
            new classA("D", "4", true) ,
            new classA("B", "2", false)  ,
            new classA("C", "3", true) 
        };

        var result = list.
            Where(o => o.IncludeInChecksum).
            OrderBy(o => o.FieldName).
            Select(o => o.ToQueryString()).
            ToStringEx("&");
    }

}

public static class ExtensionMethods
{
    public static string ToStringEx<T>(this IEnumerable<T> items, string separetor = ",")
    {
        if (items == null)
        {
            return "null";
        }

        return string.Join(separetor, items.Select(o => o != null ? o.ToString() : "[null]").ToArray());
    }

}
11.01.2015
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..