ironicman
@ironicman
незнакомец

Как вызвать произвольный метод на каждом элементе множества в стиле linq?

Нужна помощь человека, хорошо знакомого с linq. Имею:
IEnumerable<Sometype1> clist = GetC();
// ...
// каждый элемент clist содержит множество slist
// ...
IEnumerable<Sometype2> slist = с.GetS();

Нужно обойти все элементы s каждого slist'а из всех clist'ов, и над каждым s выполнить метод с сигнатурой void T(Sometype1 c, Sometype2 s).. Это первая изюминка.
Однако, и это изюминка #2, перед тем как прочитать slist с помощью c.GetS(), нужно вызвать метод с сигнатурой void A(Sometype1 c, string pass).
Cейчас я делаю так:
var querry = GetC().SelectMany(
   c => { A(c, pass); return c.GetS(); },
   (el_c, s) => { T(el_c,s); return s; });

Но это не эстетично и не прозрачно. К тому же все остальные запросы в блоке кода сделаны в манере linq, и этот фрагмент выделяется как бельмо на глазу.
Не могу понять как синтаксически верно построить запрос. Хочу написать что-то типа
var querry = from c in GetC()
                from s in /*перед этим вызовом должен быть А(c, pass)*/ c.GetS() 
                /*и где-то тут нужно как-то вызвать T(c,s)*/
                select s;
  • Вопрос задан
  • 346 просмотров
Решения вопроса 1
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
Вызвать метод c void в качестве возвращаемого значения:

query.ForEach(c => { c.T(...); } );

P.S. На счет эстетичности, проблема в именовании переменных и методов. Если назовете нормально, что и читаться будет хорошо и понятно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы