2016-05-17 9 views
0

エンティティフレームワークを使用して、対象の日付範囲の日付範囲から何日を計算していますか?Entity Framework:他の日付範囲から日付範囲を計算する方法

私は日付Aから日付Bを渡したとしましょう。日付の各行には、以前のログ日付と現在のログ日付があります。以前のログ日付と現在のログ日付の間に何日いるのかを見たい。私は現在、書かれた

私のコードは次のとおりです。

var days = toDate.Subtract(fromDate).TotalDays; 
      var usageLog = (from usageLogs in context.UsageLogs 
          where 
           (usageLogs.PreviousLogDate != null 
            && (DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= fromDate.Date && DbFunctions.TruncateTime(usageLogs.PreviousLogDate) <= toDate.Date)) || 

           (usageLogs.PreviousLogDate == null 
            && ((DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= toDate.Date) && (DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= fromDate.Date))) 

          select new 
          { 
           PackageName = usageLogs.PackageName, 
           estimateUsageCount = (double)usageLogs.UsageCount 
          }); 

      var statistics = (from usage in usageLog 
           group usage 
           by new 
           { 
            usage.PackageName 
           } 
          into grp 

           select new 
           { 
            PackageName = grp.Key.PackageName, 
            UsageCount = grp.Sum(c => c.estimateUsageCount) 
           }); 

      return statistics.ToList(); 
     } 

estimateUsageCount select文で、私は、以前と現在のログの日付の間に座っての日数を計算したいところです。 私は仕事をする機能を書こうと思っていますが、それを行う方法はわかりません。私は計算がかなり複雑であることを知っています。誰も私にそれをする方法のアイデアを与えるか?

答えて

0

あなたはこのようにそれを行うことができます:2つの日付の間の範囲については

select new 
{ 
    PackageName = usageLogs.PackageName, 
    estimateUsageCount = (usageLogs.CurrentServerLogs - usageLogs.PreviousServerLogs).Days 
}); 

、私はこのExcelの数式を見つけました:

=MAX(0,NETWORKDAYS(MAX(Date1, Date2),MIN(dateA,dateA))) 

それは使用して、このようなC#のに変換することができ三項演算子:

0 > ((date1 > date2 ? date1 : date2) - (dateA < dateB ? dateA : dateB)).Days ? 0 : ((date1 > date2 ? date1 : date2) - (dateA < dateB ? dateA : dateB)).Days 
+0

ありがとうございますが、これは日程が異なりますが、実際には2つの日付範囲を設定してh多くの場合、これら2つの日付範囲のセットが衝突します。例えば。 Date1〜Date2、DateA〜DateB、そして彼らが一緒に会う日数を見る – LittleFunny

+0

申し訳ありませんが、私は間違っています。私はちょうど2つの日付の間の範囲を含めるために私の最初の応答を編集しました。それがあなたのために働くかどうか私に教えてください。 – Patricia

+0

あなたの返事をありがとう、私はまだチェックする機会がありません。私は後でそれを試し、あなたに結果を教えます。 – LittleFunny