2016-07-06 11 views
0

私は以下のlinqを使用して、電子メールを送信することができます。私ができることをしたいと思うことは、30分前に彼らの予定の日にクライアントにメールするということです。私の質問は、これを可能にするために、以下のクエリをどのように調整するのでしょうか、開始日と終了日のフィールドを使用しています。tolistを一定の期間に制限するにはどうすればよいですか?

/// <summary> 
/// Gets the allnotes by appointment. 
/// </summary> 
/// <param name="id">The identifier.</param> 
/// <returns></returns> 
public List<tblapertureNetAppointment> getAppointmentsForEmailProccessed() 
    { 
     try 
     { 
      var _appointment = apertureNetEntities.tblapertureNetAppointments.Where(f => f.isDeleted == false && f.isProccessed==false).ToList(); 
      return _appointment.AsQueryable().ToList(); 
     } 
    catch (Exception ex) 

     { 
      string inner = string.Empty; 
      if (ex.InnerException != null) 
      { 
       inner = ex.InnerException.ToString(); 
      } 
      logger.Error("Error in IQueryable function getAppointmentsForEmail " + ex.ToString() + " " + inner); 
      return null; 
     } 
} 
+1

文章はわかりやすいものです。 – Plutonix

+2

あなたは 'ToList'を制限しませんが、既に行っているようにLINQ' Where'拡張メソッドを使ってコレクションをフィルタリングできます。そこに日付範囲のフィルタリングを追加するだけです。 – mason

+1

'_appointment'が既にメモリ内の' List <> 'である場合、' _appointment.AsQueryable()。ToList() 'の必要はありません。 –

答えて

3

のは、問題のエンティティは、予定の日付を保持しているstartTimeと呼ばれるDateTime性質を持っていると仮定しましょう。

public DateTime startTime { get; set;} 

アポイントの開始日時に基づいてリストをフィルタリングする必要があります。

return _appointment 
      .Where(appointment => 
        (appointment.startTime < Date.Now) && 
        (appointment.startTime.Date == DateTime.Today) && 
        (Date.Now - appointment.startTime).TotalMinutes < 30) 
      .ToList(); 
+0

@Nksoiはい、それは開始日時を持っていますので、動作するように思えます。ありがとうございました。理想的には、それは時間の前に24時間前にも、また、1時間前に最初のパスで送信することができます。 – rogue39nin

+0

必要な時間に合わせてフィルタを変更するだけで、数時間または数日かかる場合があります。 – Nkosi

関連する問題