0

データベースから日付の週を取得し、DateTimePicker からユーザーが選択した値と比較しようとしています。ユーザーは日を選択でき、その日の週を 1 から 52 の形式で表示するクラスを作成しました。get LINQ を選択して、データベースの特定の日付の週と、ユーザー。例:

var report = (from orders in Context.Orders
              where DateEx.ISOWeekNumber(orders.Date) == 
                    DateEx.ISOWeekNumber(datepicker1.Value)
              select orders);

しかし、LINQ には ISOWeekNumber の変換がないため、まったく機能していません。どうすればこれができるか知っている人はいますか?

4

3 に答える 3

1

必要なことを正確に実行するC#メソッドを作成できます。LINQの優れた点の1つは、クエリを作成するときに、完全なプログラミング言語のすべてのツールを利用できることです。

「isoweeknumberc#」をグーグルですばやく検索すると、次のようになります。

private int weekNumber(DateTime fromDate)
{
    // Get jan 1st of the year
    DateTime startOfYear = fromDate.AddDays(- fromDate.Day + 1).AddMonths(- fromDate.Month +1);
    // Get dec 31st of the year
    DateTime endOfYear = startOfYear.AddYears(1).AddDays(-1);
    // ISO 8601 weeks start with Monday
    // The first week of a year includes the first Thursday
    // DayOfWeek returns 0 for sunday up to 6 for saterday
    int[] iso8601Correction = {6,7,8,9,10,4,5};
    int nds = fromDate.Subtract(startOfYear).Days  + iso8601Correction[(int)startOfYear.DayOfWeek];
    int wk = nds / 7;
    switch(wk)
    {
        case 0 :
            // Return weeknumber of dec 31st of the previous year
            return weekNumber(startOfYear.AddDays(-1));
        case 53 :
            // If dec 31st falls before thursday it is week 01 of next year
            if (endOfYear.DayOfWeek < DayOfWeek.Thursday)
                return 1;
            else
                return wk;
        default : return wk;
    }
}

出典:http ://codebetter.com/blogs/peter.van.ooijen/archive/2005/09/26/132466.aspx

于 2009-08-16T20:33:35.987 に答える
1

何か同類はどうですか?

Math.Truncate(date.DayOfYear/7) +1

あなたに与える:

var report = (from orders in Context.Orders
    where Math.Truncate(orders.Date.DayOfYear/7) + 1 ==
    Math.Truncate(datepicker1.Value.DayOfYear/7) + 1
    select orders);

お役に立てば幸いです。

ダン

おそらく、Math.Truncate(date.DayOfYear / 7)を新しいDateExクラスに取り込みます

于 2009-08-16T20:00:56.953 に答える