我有一個事件列表,每個人都有一個工作日註冊。C#3.0 - 如何從星期一開始按星期命名?
現在我試圖展示所有這些事件,但按週日名稱(星期一,星期二,星期三...)排序。
我該怎麼做?我正在使用LinqToSQL和Lambda表達式。
謝謝!
我有一個事件列表,每個人都有一個工作日註冊。C#3.0 - 如何從星期一開始按星期命名?
現在我試圖展示所有這些事件,但按週日名稱(星期一,星期二,星期三...)排序。
我該怎麼做?我正在使用LinqToSQL和Lambda表達式。
謝謝!
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);
}
}
rossfabricant,我做了一些事情,就像你在上面告訴過的那樣,它通過創建這個星期幾名字的列表
你會希望你的排序字段是對應於星期幾的整數
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)
說明:通過「他們每個人都有一個工作日註冊」,星期如何表示?日期對象?枚舉?串?
我知道可以使用實現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#。
假設你的活動對象包含一個DateTime「日期」,你可以排序的DateTime.DayOfWeek枚舉,就像這樣:
List<Event> events = new List<Event>(); // filled elsewhere
events.Sort((x,y) => x.Date.DayOfWeek.CompareTo(y.Date.DayOfWeek));
那將事件星期日至星期六進行排序,因爲你」星期天和星期六不要緊。
這個工作對我來說:
from e in events
orderby e.dateFildName.Value.DayOfWeek
使用下面的代碼:
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
順序進行排序。
你有沒有將它們作爲日期時間存儲在數據庫中? – Joseph 2009-04-07 19:08:39
因爲varchar因爲我需要周姓名本身的原因 – AndreMiranda 2009-04-07 19:11:48