Лучший отвечающий
Помогите сделать правильно linq-запрос в C#

Вопрос
-
Допустим, есть класс:
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 уже результат этого перебора?
- Изменено Eugene Razmanov 17 марта 2015 г. 9:42
17 марта 2015 г. 9:23
Ответы
-
Смотря что вы подразумеваете под термином "пустое". Если имеется в виду null, то можно применить Оператор ??
Adresat = dokument.ListDocKontragent.ListDocSvUL.Nazvanie ?? dokument.ListDocKontragent.ListDocSvFL.Familia,
В данном случае, если Nazvanie не равно null - присвоится оно, в противном случае присвоится Familia (независимо, null или нет).
Если в качестве "пустого" значения может быть string.Empty или что-то подобное, то можно применить тернарный оператор. При этом условие записывается также в одну строку прямо по месту.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff 27 марта 2015 г. 7:35
17 марта 2015 г. 10:52 -
Спасибо!
Я решил проблему сам, выведя подбор в отдельный метод, но у вас более короткое решение, попробую использовать его.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff 27 марта 2015 г. 7:35
17 марта 2015 г. 11:07
Все ответы
-
Смотря что вы подразумеваете под термином "пустое". Если имеется в виду null, то можно применить Оператор ??
Adresat = dokument.ListDocKontragent.ListDocSvUL.Nazvanie ?? dokument.ListDocKontragent.ListDocSvFL.Familia,
В данном случае, если Nazvanie не равно null - присвоится оно, в противном случае присвоится Familia (независимо, null или нет).
Если в качестве "пустого" значения может быть string.Empty или что-то подобное, то можно применить тернарный оператор. При этом условие записывается также в одну строку прямо по месту.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff 27 марта 2015 г. 7:35
17 марта 2015 г. 10:52 -
Спасибо!
Я решил проблему сам, выведя подбор в отдельный метод, но у вас более короткое решение, попробую использовать его.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff 27 марта 2015 г. 7:35
17 марта 2015 г. 11:07