首先祝贺网络,这是我的第一个问题,但我在此之前已经找到了很多答案。 这是我的问题:我必须从excel文件中获取一些数据并将其打印在文件中。直到这里一切都好。但是,根据文件列表的顺序,我会以一个或另一个顺序获取数据。我的建议是在从excel获取所有数据之后,按照账单日期(数据的一个元素)对这些数据进行排序。我在下面描述我的课程。
我有我的比尔课程:
class Bill
{
private string billNumber;
private string billDate;
private DateTime date;
private string from;
private string to;
private string billCost;
private string power1;
private string power2;
private string power3;
private string power4;
private string power5;
private string power6;
private string contractNumber;
}
这是我的合同类:
class Contract
{
private List<Bill> billList;
private Dictionary<double, Bill> billsDictionary;
private double contractNumber;
}
在我的课程结束后,我有一个List<Contract>
。
我希望按日期对合同类的List<Bill>
进行排序,以便能够以正确的顺序打印帐单,但我找不到任何解决方案来订购它们。
提前致谢。
问候。
答案 0 :(得分:0)
你应该可以使用像q = q.OrderBy(a => a.ColumnName)
这样的linq来做到这一点,但是你可能想要检查你的属性的访问修饰符,你可以从外面访问它们是私有的。
以下是与Linq订购的简单示例:
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void OrderByEx1()
{
Pet[] pets = { new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 } };
IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);
foreach (Pet pet in query)
{
Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
}
}
/*
This code produces the following output:
Whiskers - 1
Boots - 4
Barley - 8
*/
请注意该类的属性是如何公开的,以便您可以从代码中的任何位置访问它们。
有关排序的更多信息,请here。
答案 1 :(得分:0)
有两种解决方案。首先,您需要公开可用于排序的属性。
public class Bill
{
// ... rest of your code
public DateTime Date
{
get
{
return this.date;
}
}
}
1)您可以将列表的Sort
与传递的比较器(msdn)一起使用:
public class Comp : IComparer<Bill>
{
public int Compare(Bill x, Bill y)
{
// remember to handle null values first (x or y or both are nulls)
return x.Date.CompareTo(y.Date);
}
}
然后:
billList.Sort(new Comp());
请注意:如果您将Comp
声明为Bill
的嵌套类,则您不必添加属性Date
。您将能够看到Bill
的私有字段并将其用于比较..
2)您可以使用linq(它创建List
的新实例):
billList = billList.OrderBy(bill => bill.Date).ToList();