Вывести упорядоченную коллекцию (используя LINQ) в список - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу заказать текстовый файл, используя LINQ по дате, и вывести все столбцы в список.

Например, входной файл:

Имя, Возраст, DOB, Мужской
Мария, 28,01 / 01/1991, Ложь
Анна, 29,06 / 06/1989, Ложь
Джон, 18,06 / 07/2000, Правда

Имя класса {публичныйдвойной возраст {получить;набор;}

    public string Name{ get; set; }

    public DateTime Date { get; set; }

    public string Male { get; set; }



public Name()
{

}

public Name(string name, double age, DateTime date, string male)
{
        Course = course;
        Amount = amount;
        Date = date;
        Male = male;
}


}

private IEnumerable<Name> ReadName()
    {
        List<Name> dataCollection = new List<Name>();
        using (var f = new StreamReader(@"R:\Data.txt"))
        {
            string line = string.Empty;
            while ((line = f.ReadLine()) != null)
            {
                var data = line.Split(',');
                dataCollection.Add(new Name(data[0], Convert.ToDouble(data[1]),Convert.ToDateTime(data[2]),  data[3]));
            }
        }
        return dataCollection;
    }

private void btnDOBOrder_Click(object sender, EventArgs e)
        {
            lstByDate.Items.Clear();
            IEnumerable<Name> names = ReadName();
            var DateOrder = name
                            .OrderByDescending(x => x.Date)
                            .ToList();

            lstByDate.DataSource = DateOrder;
        }

Имя Возраст DOB Мужской
Иоанн 18 06/07/2000 Верно
Мэри 28 01.01.1991 Ложь
Энн 29 06/06/1989 Ложь

Текущий вывод в списке:
Form1.Name
Form1.Name
Form1.Name

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

ListBox отображает коллекции ListItem с, и те имеют свойства Text и Value, которые управляют тем, что они отображают.Вы можете проецировать свою коллекцию в анонимный тип перед привязкой данных, а затем установить для DataValueField и DataTextField свои вычисленные свойства.Это может выглядеть примерно так:

var DateOrder = names.OrderByDescending(x => x.Date)
                     .Select(x => new { Text = $"{x.Name} {x.Age} {x.DOB} {x.Male}", Value = x.Name })
                     .ToList();

lstByDate.DataSource = DateOrder;
lstByDate.DataValueField = "Value";
lstByDate.DataTextField = "Text";
0 голосов
/ 14 февраля 2019

Попробуйте ICompare:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication100
{

    class Program
    {
        const string FILENAME = @"c:\temp\test.csv";
        static void Main(string[] args)
        {
            Person person = new Person(FILENAME);
            person.Sort();
        }

    }
    public class Person : IComparable 
    {
        public string Name { get;set;}
        public int Age { get;set;}
        public DateTime DOB { get;set;}
        public string sex { get;set;}

        List<Person> dataCollection = new List<Person>();

        public Person() { }
        public Person(string filename)
        {            
            using (var f = new StreamReader(filename))
            {
                string line = string.Empty;
                int rowCount = 0;
                while ((line = f.ReadLine()) != null)
                {
                    if (++rowCount > 1)
                    {
                        var data = line.Split(',');
                        dataCollection.Add(new Person() { Name = data[0], Age = Convert.ToInt32(data[1]), DOB = Convert.ToDateTime(data[2]), sex = data[3]});
                    }
                }
            }
        }
        public int CompareTo(object obj)
        {
            return this.DOB.CompareTo(((Person)obj).DOB);
        }

        public void Sort()
        {
            dataCollection.Sort();
        }
    }

}
0 голосов
/ 14 февраля 2019

Вы пишете в списке строковое представление вашего класса имен?Если да, вам просто нужно переопределить метод ToString в вашем классе Name, чтобы отобразить, какую информацию вы хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...