任何人都可以帮我解决这个问题。,,
我有一个需要根据状态列排序的List。 样本清单。
IList<Letters> lstLetterSummary = new List<Letters>();
字母datacontract
public class ERDRMessageSummary
{
[DataMember(IsRequired = true, Order = 1)]
public string LetterId{ get; set; }
[DataMember(IsRequired = true, Order = 2)]
public int MessageId { get; set; }
[DataMember(IsRequired = true, Order = 3)]
public string MessageType { get; set; }
[DataMember(IsRequired = true, Order = 4)]
public DateTime RegisteredDate { get; set; }
[DataMember(IsRequired = true, Order = 5)]
public string Status { get; set; }
[DataMember(IsRequired = true, Order = 7)]
public string FirstName { get; set; }
[DataMember(IsRequired = true, Order = 8)]
public string LastName { get; set; }
}
该列表包含一个名为status的成员,您可以在合同中看到,值可以是: 1.Registered。 2.等待发送。 3.Sent。 4.Rejected。
列表需要根据状态值进行排序,并且应该按以下顺序排列。 1.Rejected。 2.等待发送。 3.sent。 4.registered。
我正在使用c#和linq ..
任何帮助都会非常感激..
答案 0 :(得分:3)
这个怎么样?
string[] statuses = { "Rejected", "Waiting", "To send", "Sent", "Registered" };
Dictionary<string, int> OrderingDictionary =
statuses
.Select((x, i) => new { x, i })
.ToDictionary(z => z.x, z => z.i);
List<string> orderedData =
lstLetterSummary
.OrderBy(s => OrderingDictionary[s])
.ToList();
答案 1 :(得分:3)
这个怎么样?这很简单:)
string[] statuses = { "Rejected", "Waiting to send", "Sent", "Registered" };
lstLetterSummary.Sort((x, y) =>
{
return Array.IndexOf(statuses, x.Status).CompareTo(Array.IndexOf(statuses, y.Status));
});
答案 2 :(得分:2)
首先定义一个方法,将您的状态字符串转换为与所需顺序对应的数值:
int GetStatusOrder(string status)
{
switch (status)
{
case "Rejected" : return 1;
case "Waiting to sent" : return 2;
case "Sent" : return 3;
case "Registered" : return 4;
default : return 5;
}
}
然后,您可以使用LINQ OrderBy
运算符并调用此方法:
var sortedList = myList.OrderBy(l => GetStatusOrder(l.Status)).ToList();
当你无法改变你的课程时,这只是一个快速而肮脏的解决方案。如果可能,您应该将Status
字段的类型从字符串转换为枚举类型。