#c# #linq #console-application
Вопрос:
Я новичок в программировании и все еще учусь, работая над LINQ, я создал очень небольшой код, который сгруппировал массив int в виде пакетов, запрос LINQ, который я использую, отображает простой вывод, что не является моим требованием, я хочу, чтобы следующий вывод в консольных окнах с помощью запроса LINQ, пожалуйста, помогите мне.
Вывод в окне консоли
<Results>
<Result>
<Marks>60</Marks>
<Marks>50</Marks>
<Marks>70</Marks>
<Total>180</Total>
</Result>
<Result>
<Marks>30</Marks>
<Marks>80</Marks>
<Marks>65</Marks>
<Total>175</Total>
</Result>
<Result>
<Marks>90</Marks>
<Marks>75</Marks>
<Marks>55</Marks>
<Total>220</Total>
</Result>
Мой код таков
static void Main(string[] args)
{
List<int> email = new List<int>() { 60, 50, 70, 30, 80, 65, 90, 75, 55 };
foreach (var batch in email.Batch(3))
{
Console.WriteLine(String.Join(",", batch));
}
Console.ReadLine();
}
Запрос LINQ
public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> items,
int maxItems)
{
return items.Select((item, inx) => new { item, inx })
.GroupBy(x => x.inx / maxItems)
.Select(g => g.Select(x => x.item));
}
Ответ №1:
Да, LINQ to XML делает это очень простым — вы можете передавать элементы, включая последовательности элементов, в XElement
конструктор, и они включаются вложенным способом:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Xml.Linq;
static class Extensions
{
public static IEnumerable<IEnumerable<T>> Batch<T>(
this IEnumerable<T> items, int maxItems) =>
items.Select((item, inx) => new { item, inx })
.GroupBy(x => x.inx / maxItems)
.Select(g => g.Select(x => x.item));
}
class Program
{
static void Main(string[] args)
{
List<int> email = new List<int>() { 60, 50, 70, 30, 80, 65, 90, 75, 55 };
var element = new XElement("Results",
email.Batch(3)
// Each batch creates a new Result element
.Select(batch =>
new XElement("Result",
// Each element of the batch creates a Mark
batch.Select(mark => new XElement("Mark", mark)),
// The batch also has a Total element
new XElement("Total", batch.Sum()))));
Console.WriteLine(element);
}
}