Как написать `Aggregate` в `from .. in ..` нотация?

#c# #.net #linq

#c# #.net #linq

Вопрос:

Как написать

 string result = strings.Aggregate(new StringBuilder(), (s, a) => s.AppendLine(a)).ToString();
  

в from a in strings select ... форме?

Комментарии:

1. Я не верю, что вы можете.

2. Может быть, я могу эмулировать его, используя некоторые другие ключевые слова?

3. Смотрите мой ответ для других ключевых слов.

4. Вы могли бы, но вам нужно было бы сделать это в VB вместо C #, поскольку VB поддерживает ключевые слова Aggregate, Sum, Count в качестве собственных ключевых слов запроса.

5. @Jim: Как будет выглядеть решение OP в VB с Aggregate ключевым словом?

Ответ №1:

Вы не можете. Смотрите Здесь список ключевых слов запроса LINQ:

http://msdn.microsoft.com/en-us/library/bb310804.aspx

Как бы вы это ни делали, вам все равно нужно будет вызвать метод ( Aggrigate ).

Ответ №2:

Как насчет решения без необходимости агрегирования вообще:

     string[] strings = {"1", "2", "3"};
    string result = String.Join("r", strings);
  

Комментарии:

1. 1; Я бы рекомендовал это в большинстве случаев, поскольку гораздо проще определить, что происходит. Linq бесценен, но иногда ваша проблема менее абстрактна. Это также не добавляет новую строку в конце (что часто предпочтительнее).

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