我目前有一個人的串列,我想根據串列中的TimeSpans進行排序。 我的類看起來如下:
public class PersonClass
{
public string name { get; set; }
public TimeSpan Time { get; set; }
public TimeSpan OfficialTime { get; set; }
因此,我想一次對兩列進行排序,并顯示兩列中的最低時間,但只有當一個值實際存在時,才會顯示,并給予OfficialTime更多的權重
。因此,請舉幾個例子
Person1; Time:00: 03: 02; OfficialTime:00:03:01.
Person2; 時間:00:02:54; OfficialTime: 00:02:55; OfficialTime?
Person3; 時間:00:02:56; OfficialTime: 00:00:00; OfficialTime.
Person4; Time:00:00:00; OfficialTime: 00:00:00; OfficialTime.
Person5; Time:00:00:00; OfficialTime: 00:02:57; OfficialTime.
Person6; 時間:00:01:16; OfficialTime: 00:02: 58
因此,為了進行排序,我需要對OfficialTime進行排序,如果它是可用的并且高于0。 如果有的人有時間但沒有官方時間,那么我想在排序中使用時間。 當Time和OfficialTime都是0時,它們不應該被添加到tmpList中。
所以在上面的例子中,順序是:
Person2; Time:00: 02: 54; OfficialTime:00:02:55。
Person3; 時間:00:02:56; OfficialTime: 00:00:00; OfficialTime.
Person5; Time:00:00:00; OfficialTime: 00:02:57; OfficialTime.
Person6; 時間:00:01:16; OfficialTime: 00:02:58; OfficialTime.
Person1; 時間:00:03:02; OfficialTime: 00:03:01; OfficialTime.
所以我嘗試使用以下代碼:
var tmpList = Persons.OrderBy(x => x.OfficialTime)
.ThenBy(x => x.Time)
.Where(x => x.OfficialTime > TimeSpan.FromSeconds(0) || x.Time > TimeSpan.FromSeconds(0)
.ToList()。
那么對于這個問題,正確的做法是什么呢?
供你參考:
private void test()
{
List<PersonClass> Persons = new List<PersonClass>()。
Persons.Add(new PersonClass() { name = "Person 1"/span>, Time = TimeSpan. Parse("00:03:02"), OfficialTime = TimeSpan.Parse("00:03:01") })。)
Persons.Add(new PersonClass() { name = "Person 2", Time = TimeSpan. Parse("00:02:54"), OfficialTime = TimeSpan.Parse("00:02:55") })。)
Persons.Add(new PersonClass() { name = "Person 3", Time = TimeSpan. Parse("00:02:56"), OfficialTime = TimeSpan.Parse("00:00:00") }) 。
Persons.Add(new PersonClass() { name = "Person 4"/span>, Time = TimeSpan. Parse("00:00:00"), OfficialTime = TimeSpan.Parse("00:00:00") })。)
Persons.Add(new PersonClass() { name = "Person 5"/span>, Time = TimeSpan. Parse("00:00:00"), OfficialTime = TimeSpan.Parse("00:02:57") }) 。
Persons.Add(new PersonClass() { name = "Person 6", Time = TimeSpan. Parse("00:01:16"), OfficialTime = TimeSpan.Parse("00:02:58") })。)
var tmpList = Persons.OrderBy(x => x.OfficialTime)
.ThenBy(x => x.Time)
.Where(x => x.OfficialTime > TimeSpan.FromSeconds(0) || x.Time > TimeSpan.FromSeconds(0)
.ToList()。
}
謝謝你
uj5u.com熱心網友回復:
也許吧
var results = Persons
.Where(x => x.OfficialTime > TimeSpan.Zero || x.Time > TimeSpan.Zero)
.OrderBy(x => x.OfficialTime > x.Time ? x.OfficialTime : x.Time )
.ToList()。
輸出
00:02。 54 00: 02: 55
00:02:56 00:00:00:00
00:00:00 00:02: 5700:01:16 00:02:5800:03:02 00:03:01
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310096.html
標籤:
上一篇:linq基于多列的orderby和各種crietria。
下一篇:LINQile陣列拆分
