2009-04-07 96 views
1

我有一個事件列表,每個人都有一個工作日註冊。C#3.0 - 如何從星期一開始按星期命名?

現在我試圖展示所有這些事件,但按週日名稱(星期一,星期二,星期三...)排序。

我該怎麼做?我正在使用LinqToSQL和Lambda表達式。

謝謝!

+0

你有沒有將它們作爲日期時間存儲在數據庫中? – Joseph 2009-04-07 19:08:39

+0

因爲varchar因爲我需要周姓名本身的原因 – AndreMiranda 2009-04-07 19:11:48

回答

4
public class Event 
{ 
    public string Day; 
} 

[Test] 
public void Te() 
{ 
    var dayIndex = new List<string> {"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"}; 
    var list = new List<Event> {new Event(){Day = "saturday"}, new Event() {Day = "Monday"}, new Event() {Day = "Tuesday"}}; 
    var sorted = list.OrderBy(e => dayIndex.IndexOf(e.Day.ToUpper())); 
    foreach (var e in sorted) 
    { 
    Console.WriteLine(e.Day); 
    } 
} 
+0

rossfabricant,我做了一些事情,就像你在上面告訴過的那樣,它通過創建這個星期幾名字的列表而工作得很好! 謝謝! – AndreMiranda 2009-04-07 20:15:07

1

你會希望你的排序字段是對應於星期幾的整數

1 = Monday 
2 = Tuesday 
3 = Wednesday 
... 

沒有更多的細節,這是很難給你一個代碼示例。如果您的星期幾存儲爲varchar,我建議您創建一個數據庫標量函數,將星期幾作爲字符串參數並返回相應的整數。

這裏是在T-SQL的例子:

create function dbo.GetDayNumber (
    @dayOfWeek varchar(9) 
) returns tinyint 
as begin 

declare @dayNum tinyint 
set @dayNum = 0 

select @dayNum = 
    case 
     when @dayOfWeek = 'Monday' then 1 
     when @dayOfWeek = 'Tuesday' then 2 
     when @dayOfWeek = 'Wednesday' then 3 
     when @dayOfWeek = 'Thursday' then 4 
     when @dayOfWeek = 'Friday' then 5 
     when @dayOfWeek = 'Saturday' then 6 
     when @dayOfWeek = 'Sunday' then 7 
    end 

return @dayNum 

end 

要小心 - 上面的代碼無效天的名字,如果你的數據是不完美可能對你的成績螺絲返回0。

select 
    MyEvent, 
    DayOfWeek 
from MyEventTable 
order by dbo.GetDayNumber(DayOfWeek) 
0

說明:通過「他們每個人都有一個工作日註冊」,星期如何表示?日期對象?枚舉?串?

2

我知道可以使用實現IComparer(Of DateTime)的自定義類對列表進行排序。所以,你會創建一個這樣的類:

Public Class WeekDayComparer 
    Implements IComparer(Of MyEvent) 

    Public Function Compare(ByVal x As MyEvent, ByVal y As MyEvent) As Integer Implements System.Collections.Generic.IComparer(Of MyEvent).Compare 

    Return GetDayOfWeekNumber(x.DayOfWeek).CompareTo(GetDayOfWeekNumber(y.DayOfWeek)) 

    End Function 

    Private Function GetDayOfWeekNumber(ByVal dayOfWeek As String) As Integer 

    Select Case dayOfWeek.ToLower() 
     Case "monday" 
     Return 0 
     Case "tuesday" 
     Return 1 
     Case "wednesday" 
     Return 2 
     Case "thursday" 
     Return 3 
     Case "friday" 
     Return 4 
     Case "saturday" 
     Return 5 
     Case "sunday" 
     Return 6 
     Case Else 
     Return 7 
    End Select 

    End Function 

End Class 

然後,你把你的對象列表,並使用您的WeekDayComparer類排序。

events.Sort(New WeekDayComparer()) 

這是VB,但很容易轉換爲C#。

1

假設你的活動對象包含一個DateTime「日期」,你可以排序的DateTime.DayOfWeek枚舉,就像這樣:

List<Event> events = new List<Event>(); // filled elsewhere 
events.Sort((x,y) => x.Date.DayOfWeek.CompareTo(y.Date.DayOfWeek)); 

那將事件星期日至星期六進行排序,因爲你」星期天和星期六不要緊。

0

這個工作對我來說:

from e in events 
orderby e.dateFildName.Value.DayOfWeek 
1

使用下面的代碼:

var originalCollection = new List<string>{ "Wednesday","Friday" "Thursday", "Sunday", "Monday","Saturday","Tuesday"};   
var weekDayList = new List<string>{ "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday", "Sunday"}; 
var sortedWeekDays = originalCollection (i => weekDayList.IndexOf(i.ToString())); 

有了它的originalCollection將根據weekDayList順序進行排序。

相關問題