Форум программистов, компьютерный форум, киберфорум
LINQ
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
1

Краткая запись метода LINQ

09.01.2017, 22:19. Показов 868. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, форумчане!
Подскажите пожалуйста более компактную запись метода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 [HttpPost]
        [Route("SearchForm")]
        public IHttpActionResult SearchForm([FromBody] dynamic jsonData)
        {
            if (!this.ModelState.IsValid)
                return this.BadRequest(this.ModelState);
            List<ClientsGridModel> res = new List<ClientsGridModel>();
            SearchFormData data = JsonConvert.DeserializeObject<SearchFormData>(jsonData.ToString(), setJsonSettings());
            ClientInfoDTO[] bbsppClients = this._bbsppService.SearchAutoCompleteClients(data.SearchTerm, 30);
 
            foreach (ClientInfoDTO bbsppClient in bbsppClients)
            {
                res.Add(new ClientsGridModel
                {
                    ClientGuid = bbsppClient.ClientGuid,
                    Fio = bbsppClient.Fio,
                    Gender = bbsppClient.Gender,
                    DateOfBirth = bbsppClient.DateOfBirth,
                    Phones = bbsppClient.Phones.Count() != 0 ? bbsppClient.Phones[0] : "",
                    Contacts = bbsppClient.Contacts.Count() != 0 ? bbsppClient.Contacts[0] : "",
                    Comment = bbsppClient.Comment
                });
            }
 
            ClientsGridModel[] advs = GetAdvSourceAndLastContact(bbsppClients);
 
            if (advs.Length != 0)
                foreach (ClientsGridModel item in res)
                    foreach (ClientsGridModel adv in advs)
                        if (item.ClientGuid == adv.ClientGuid)
                        {
                            item.adv_InviteId = adv.adv_InviteId;
                            item.LastContact = adv.LastContact;
                        }
 
            List<ClientsGridModel> filterGuids = this._dataDirectoryQueries.GetSearchFormClients(data).ToList();
 
                if (filterGuids.Count() != 0)
                        foreach (ClientsGridModel guid in filterGuids)
                                res.RemoveAll(x => x.ClientGuid != guid.ClientGuid);
            return this.Ok(res);
        }
Добавлено через 1 час 14 минут
Как убрать всю эту кучу форычей и переписать более красиво и компактно этот метод?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2017, 22:19
Ответы с готовыми решениями:

Как без цикла инициализировать объект внутри LINQ метода
Проблема в том , что я хочу без лишних телодвижений получить объект над которым работает LINQ без...

Linq Entities: как изменить запись в таблице
здравствуйте. Битый час уже вожусь в попытках изменить запись в таблице, но все четно. За...

Почему LINQ to Entity содержит не все методы LINQ to Objects?
Почему не все методы linq to entity содержат все методы?Чем например Linq to object

Более краткая запись метода (LINQ)
Доброго времени суток, форумчане, подскажите пожалуйста как записать более кратко метод, на LINQ...

5
.NET senior
441 / 359 / 137
Регистрация: 23.09.2016
Сообщений: 980
10.01.2017, 01:05 2
Alex_trader, чем Вам так foreach не понравился? нормальный же цикл (да и лучше, когда вызывается он явно - нет неопределенности).
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
10.01.2017, 16:17  [ТС] 3
bax_tang, слишком длинный метод, хотелось бы Linq использовать, для более компактной его записи

Добавлено через 10 часов 10 минут
Немного изменил метод, осталось три форыча, собираю результирующий список, выбирая элементы из двух других, неужели не существует более компактной записи этих форычей?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 ClientInfoDTO[] bbsppClients = this._bbsppService.SearchAutoCompleteClients(data.SearchTerm, 30);
 ClientsGridModel[] clientsAdvertisings = this._dataDirectoryQueries.GetClientsAdvSource(bbsppClients);
 ClientsGridModel[] clientsLastContact = this._dataDirectoryQueries.GetClientsLastContact(bbsppClients);
 
 foreach (ClientInfoDTO bbsppClient in bbsppClients)
            {
                res.Add(new ClientsGridModel
                {
                    ClientGuid = bbsppClient.ClientGuid,
                    Fio = bbsppClient.Fio,
                    Gender = bbsppClient.Gender,
                    DateOfBirth = bbsppClient.DateOfBirth,
                    Phones = bbsppClient.Phones.Count() != 0 ? bbsppClient.Phones[0] : "",
                    Contacts = bbsppClient.Contacts.Count() != 0 ? bbsppClient.Contacts[0] : "",
                    Comment = bbsppClient.Comment
                });
            }
 
            if (clientsAdvertisings.Length != 0)
                foreach (ClientsGridModel item in res)
                    foreach (ClientsGridModel adv in clientsAdvertisings)
                        if (item.ClientGuid == adv.ClientGuid)
                        {
                            item.adv_InviteId = adv.adv_InviteId;
                            item.adv_Invite = adv.adv_Invite;
                        }
 
            if (clientsLastContact.Length != 0)
                foreach (ClientsGridModel item in res)
                    foreach (ClientsGridModel cnt in clientsLastContact)
                        if (item.ClientGuid == cnt.ClientGuid)
                            item.LastContact = cnt.LastContact;
0
24 / 10 / 5
Регистрация: 30.01.2015
Сообщений: 175
12.01.2017, 18:18 4
Alex_trader, Я понимаю что ты хочешь уменьшить по минимуму код, но ставь подалуйста скобочки, а то он совершенно нечитаемый. Я дальше первого цикла да же читать не стал. Во что могу подсказать.
C#
1
2
3
4
5
            res.AddRange(bbsppClients.Select(clientInfo => new ClientsGridModel
            {
                ClientGuid = clientInfo.ClientGuid,
                Comment = clientInfo.Comment
            }));
0
3 / 3 / 5
Регистрация: 11.11.2015
Сообщений: 413
12.01.2017, 19:39  [ТС] 5
Цитата Сообщение от kol Посмотреть сообщение
Я понимаю что ты хочешь уменьшить по минимуму код, но ставь подалуйста скобочки, а то он совершенно нечитаемый. Я дальше первого цикла да же читать не стал. Во что могу подсказать.
C#
1
2
3
4
5
6
7
8
9
10
 res.AddRange(bbsppClients.Select(bbsppClient => new ClientsGridModel
            {
                ClientGuid = bbsppClient.ClientGuid,
                Fio = bbsppClient.Fio,
                Gender = bbsppClient.Gender,
                DateOfBirth = bbsppClient.DateOfBirth,
                Phones = bbsppClient.Phones.Count() != 0 ? bbsppClient.Phones.Where(x => x != "0").FirstOrDefault() : "",
                Contacts = bbsppClient.Contacts.Count() != 0 ? bbsppClient.Contacts[0] : "",
                Comment = bbsppClient.Comment
            }));
Добавлено через 2 минуты
kol, спасибо, а с этим что можно придумать?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 if (clientsAdvertisings.Length != 0)
            {
                foreach (ClientsGridModel item in res)
                {
                    foreach (ClientsGridModel adv in clientsAdvertisings)
                    {
                        if (item.ClientGuid == adv.ClientGuid)
                        {
                            item.adv_InviteId = adv.adv_InviteId;
                            item.adv_Invite = adv.adv_Invite;
                        }
                    }
                }
            }
0
24 / 10 / 5
Регистрация: 30.01.2015
Сообщений: 175
12.01.2017, 22:12 6
Alex_trader, c LINQ вы не можете изменять саму коллекцию. Можно отфильтровать и записать в новую коллекцию.
C#
1
2
3
            clientsAdvertisings = clientsAdvertisings
                .Where(clientAdv => res.Any(item => item.ClientGuid == clientAdv.ClientGuid))
                .ToList();
0
12.01.2017, 22:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 22:12
Помогаю со студенческими работами здесь

Краткая запись условного оператора)
Не знаете как можно записать по другому?. if (a%2==0 &amp;&amp; a%2==0&lt;0) типа if (a%2==0 &amp;&amp; &lt;0)

Аргументы для метода WriteTo из LINQ to XML
Добрый день! Подскажите пожалуйста.Нужно записать вместо &quot;...&quot; - новый аргумент,как правильно...

LINQ to XML. Оптимизация метода для сохранения документа
В общем имеем такой метод: public void SaveColection(List&lt;Post&gt; postList, string path) ...

Есть ли аналог в Entity Framework метода Contain() как Linq to Sql
например, чтобы в Linq отфильтровать в таблице по полю Name все строки, в которых есть наличие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru