locked
Помогите сделать правильно linq-запрос в C# RRS feed

  • Вопрос

  • Допустим, есть класс:

    public class DocList
    {
         public string Adresat { get; set; }
         public string Nazvanie { get; set; }
         public string Data { get; set; }
         public string Primechanie { get; set; }
    }

    С одного ресурса я запрашиваю json-строку, в которой содержится список документов, сериализую строку в класс (в другой, там довольно много внутреннего содержимого из свойств, массивов классов и др.). Из него я беру массив классов, в котором непосредственно содержится список документов. Пусть этим массивом будет answer.

    Далее мне надо вывести всё это дело списком в ListView. Я делаю это так:

    var postList = from dokument in answer
                           select new DocList
                           {
                                   Adresat = dokument.ListDocKontragent.ListDocSvUL.Nazvanie,
                                   Nazvanie = dokument.Nazvanie,
                                   Data = dokument.Data,
                                   Primechanie = dokument.Primechanie
                           };
    return postList;

    Вся проблема в том, что для Adresat надо присваивать не конкретно dokument.ListDocKontragent.ListDocSvUL.Nazvanie, а делать перебор:

    если dokument.ListDocKontragent.ListDocSvUL.Nazvanie не пустое, то присвоить его

    иначе если dokument.ListDocKontragent.ListDocSvFL.Familia не пустое, то присвоить его


    То есть, адресатом может быть не организация, а физлицо, а синтаксис позволяет выбрать что-то одно (хотя, я новичок, могу чего-то не знать). Можно как-то в тело linq-запроса загнать вышеобозначенную последовательность действий, чтобы присваивать Adresat уже результат этого перебора?


    17 марта 2015 г. 9:23

Ответы

  • Смотря что вы подразумеваете под термином "пустое". Если имеется в виду null, то можно применить Оператор ??

    Adresat = dokument.ListDocKontragent.ListDocSvUL.Nazvanie ?? dokument.ListDocKontragent.ListDocSvFL.Familia,

    В данном случае, если Nazvanie не равно null - присвоится оно, в противном случае присвоится Familia (независимо, null или нет).

    Если в качестве "пустого" значения может быть string.Empty или что-то подобное, то можно применить тернарный оператор. При этом условие записывается также в одну строку прямо по месту.

    17 марта 2015 г. 10:52
  • Спасибо!

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

    17 марта 2015 г. 11:07

Все ответы

  • Смотря что вы подразумеваете под термином "пустое". Если имеется в виду null, то можно применить Оператор ??

    Adresat = dokument.ListDocKontragent.ListDocSvUL.Nazvanie ?? dokument.ListDocKontragent.ListDocSvFL.Familia,

    В данном случае, если Nazvanie не равно null - присвоится оно, в противном случае присвоится Familia (независимо, null или нет).

    Если в качестве "пустого" значения может быть string.Empty или что-то подобное, то можно применить тернарный оператор. При этом условие записывается также в одну строку прямо по месту.

    17 марта 2015 г. 10:52
  • Спасибо!

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

    17 марта 2015 г. 11:07