Возникла задача получить из списка объектов (IList<People>) другой, а именно пронумерованный (IDictionary<int,People>). Те получить некоторый аналог ROWNUM (Oracle) или ROWNUMBER (MS SQL Server).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Linq.test
{
class Program
{
static void Main(string[] args)
{
// источник записей
var mans = new[] {
new People { Name = "John", Age = 23 },
new People { Name = "Bob", Age = 12 },
new People { Name = "Bill", Age = 43 },
new People { Name = "Patrick", Age = 69 }
};
// посмотрим что там в списке ;-)
foreach (var man in mans)
{ Console.WriteLine(man.ToString()); }
// получаем проиндексированный список
var counteredMan = GetIndexed(mans);
// собственно выводим его в консоль
foreach (var item in counteredMan)
{ Console.WriteLine(item.Key + " - " + item.Value); }
Console.ReadLine();
}
/// <summary>
/// Получение пронумерованного списка
/// </summary>
/// <param name="pupils"></param>
/// <returns></returns>
private static IDictionary<int, People> GetIndexed(IEnumerable<People> pupils)
{
return pupils.Select((man, i) => new
{
id = i+1,
man = man
}).ToDictionary(key => key.id, val => val.man);
}
}
/// <summary>
/// Объект для опытов
/// </summary>
public class People
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{ return "Гражданин " + Name + ", возраст: " + Age; }
}
}
Комментариев нет:
Отправить комментарий