2016-04-05 4 views
0

私はWindowsのタスクスケジューラで使用しているアラームサービスを作成しようとしています。しかし、私が必要とするのは、見通しの能力を詮索ボタンの横に再現することです。しかし、それはcomparsionでboolに日付時刻を変換することはできません。会議の前にtmeの設定された期間の前に時間を見つける

/// <summary> 
/// Gets the appointments based on a reminder of time 
/// </summary> 
/// <param name="reminderLength">Length of the reminder.</param> 
/// <returns></returns> 
public List<Appointment> GetAppointments(int reminderLength) 
{ 
    List<Appointment> list = new List<Appointment>(); 

    try 
    { 
     var q = from a in apertureNetEntities.Appointments.Where(a => a.Start.Value.AddMinutes(-reminderLength)) 
       select a; 

     list = q.ToList(); 
    } 
    catch (Exception ex) 

    { 
     string inner = string.Empty; 
     if (ex.InnerException != null) 
     { 
      inner = ex.InnerException.ToString(); 
     } 
     logger.Error("Error in List<Appointment> function GetAppointments " + ex.ToString() + " " + inner); 
     return null; 
    } 

    return list; 
} 

編集

ここでエラーアカウント

Start.Value.AddMinutes(-reminderLength)次の行で

+0

? –

+0

@Remuze私は私の答えの上で編集する – rogue39nin

答えて

2

apertureNetEntities.Appointments.Where(a => a.Start.Value.AddMinutes(-reminderLength)) 

AddMinutesは、DateTimeを返します。 Whereは、その内部でブール値に評価される関数を想定しています。このエラーを回避するには、DateTimeと何かを比較する必要があります。

例えば:strickt01 @

apertureNetEntities.Appointments.Where(a => a.Start.Value.AddMinutes(-reminderLength) < DateTime.Now) 
+0

私はちょうど30分などを開始する前に時間を見つけようとしていると思います – rogue39nin

+0

しかし、私は30分のボロウ開始列を見つけたい場合は、それは実際には動作しません。 – rogue39nin

+0

私はオペレータを入れ替えました。これで、30分以内に開始するすべてのものが返されます(reminderLengthの値を前提とします)。過去の予定などを避けるために別の条件を追加することもできますが、パターンは明確にする必要があります。 – strickt01

1

は正しいです。

私は個人的には、その読みやすい。

//where the start time is greater than now minus 30min 
var reminderLength = 30; 
var timeAfter = DateTime.Now.AddMinutes(-reminderLength); 
apertureNetEntities.Appointments.Where(a => a.Start > timeAfter) 

更新多分.... ような何か?

//今から30分後にすべての予定を探しています。エラーが発生し

//だけ次の30分で

var reminderLength = 30; 
var timeBefore = DateTime.Now.AddMinutes(reminderLength); 
var currentDateTime = Datetime.Now; 
A.Appointments 
    .Where(x => x.Start > currentDateTime //greater than now 
      && x.Start < timeBefore //less now + 30min 
     ) 
+0

はい、それは時々、人々がすべてを「ワンライナー」にすることに執着しているようです。これは何が起こっているかを非常に明確にします。 –

+0

このコードの問題は、30分前にすべての予定が返されることです。そう遠く離れた未来の予定が返されます。要件は、今後30分以内に開始する予定のみを返すことです。 – strickt01

+0

これを含めて今はそれを修正しますか?もしそうなら、私は答えに追加します – Seabizkit

関連する問題