我想对对象属性为字符串类型的List进行排序。 其中一个属性是字符串类型的时间,当我尝试对它进行排序时,如下所示。
1:12, 13:24, 19:56, 2:15, 26:34, 8:42.
这里的排序是基于字符串进行的。 现在我想将这个刺激转换为加倍(1.12,13.24,19.56,2.15,26.34,8.42)并对其进行排序。然后通过替换'来填充数据。'与':'。
我尝试了类似下面的内容,但仍然按字符串进行排序。
public class Model
{
public string Duration { get; set; }
public string Dose { get; set; }
}
List<Model> lsModelData = new List<Model>();
//Added some model objects here
// query for sorting the lsModelData by time.
var sortedList = lsModelData.OrderBy(a => Convert.ToDouble(a.Duration.Replace(":", ".")));
我正在尝试更换时间&#34;:&#34;用&#34;。&#34;然后将其转换为double以执行排序操作。
任何人都可以更正此声明以正确地进行此排序。
答案 0 :(得分:1)
如果您想根据持续时间对数据进行排序,请尝试此操作。它的测试肯定适合你。
public class Models
{
public string Duration { get; set; }
public string Dose { get; set; }
}
List<Models> lstModels = new List<Models>();
lstModels.Add(new Models { Duration = "101:12" });
lstModels.Add(new Models { Duration = "13:24" });
lstModels.Add(new Models { Duration = "19:56" });
List<Models> sortedList = (from models in lstModels
select new Models
{
Dose = models.Dose,
Duration = models.Duration.Replace(':','.')})
.ToList()
.OrderBy(x=>Convert.ToDouble(x.Duration))
.ToList();
答案 1 :(得分:0)
我不确定你真正想要的是什么,但是如果你想只返回持续时间,那么在排序后选择它
var sortedList = lsModelData.OrderBy(a => Convert.ToDouble(a.Duration.Replace(":", "."))).Select(a=> a.Duration).ToList();
或
var sortedList = lsModelData..Select(a=> a.Duration).OrderBy(a => Convert.ToDouble(a.Replace(":", "."))).ToList();
答案 2 :(得分:0)
在这种情况下,最好按长度排序,然后按内容排序:
var sortedList = lsModelData.OrderBy(a => a.Duration.Length)
.ThenBy(a => a.Duration)
在排序(或过滤)之前转换数据库数据总是使查询效率低下,因为索引不能再使用了。