2017-11-20 6 views
0

イメージに表示されているように、名前が "Loggs"のテーブルがあります。

enter image description hereAsp.Net Mvcプロジェクトで2週間以上経過したレコードを削除するアクションを作成する方法

2週間以上経過したすべてのレコードを削除するアクションを作成したいとします。たとえば、今日は2017-11-20で、LoggId 1,2および3には古いLoggdateがあります。それらを削除する方法を作成するには? 古い日付の配列である

public DateTime[] OldDates() 
{ 
    var oldDate = DateTime.Now.AddDays(-14); 

return context.Loggs.Where(u => u.LoggDate < oldDate).Select(d => d.LoggDate).ToArray(); 

} 

ここ....

を私は配列でそれらのLoggId年代を入れてみました、と私は配列でさえも古い日付を試みたが、その後、私は方法がわからないとIdによって試みられました

public int[] OldDateId() 
{ 
    var oldDate = DateTime.Now.AddDays(-14); 
    return context.Loggs.Where(u => u.LoggDate < oldDate).Select(d => d.LoggId).ToArray(); 

} 

しかし、次に削除アクションを作成する方法....? は、私はこのような試みたが、私は

public ActionResult DeleteOldLogs() 
{ 
    var datesToRemove = OldDates(); 
    using (context) 
    { 
    context.Loggs.Remove(.....) // I don't know how to formulate here ..;) 
    } 
} 

それをcompliteしていないか事前にありがとうございます!

+0

可能な複製(https://stackoverflow.com/questions/2519866/how-do-i-delete-multiple- [私は(foreachのなし)Entity Frameworkの中に複数の行を削除する方法]エントリーフレームワークなしでforeach) – Igor

答えて

1

私はLoggsが表であると仮定して、あなたが何かを削除するには、エンティティを使用する方法を求めています?

var oldDate = DateTime.Now.AddDays(-14); 
var dates = context.Loggs.Where(l => l.LoggDate < oldDate); 
context.Loggs.RemoveRange(dates); 
context.SaveChanges(); 
3

エンティティのコレクションを受け取るRemoveRangeメソッドを使用できます。

また、あなたのアクションメソッドは何かを返す必要があります。このコードが実行されます場合は

public ActionResult DeleteOldLogs() 
{ 
    var oldDate = DateTime.Now.AddDays(-14); 
    var oldItems = context.Loggs.Where(u => u.LoggDate < oldDate); 
    context.Loggs.RemoveRange(oldItems); 
    context.SaveChanges(); 

    return Content("Deleted successfully"); 
} 

、EFは、古いレコードを取得し、Nが最初のSELECTクエリから返された数のレコードですDELETEクエリのN数を実行するために1つのSELECTクエリを発行します。

別のオプションを使用すると、現在のタイムスタンプにAddDaysメソッドを呼び出していることに注意してくださいあなたのoldItemsコレクション内の各項目について

var oldItems = context.Loggs.Where(u => u.LoggDate < oldDate); 
foreach (var oldItem in oldItems) 
{ 
    context.Loggs.Remove(oldItem); 
} 
context.SaveChanges(); 

を削除する呼び出すことです。あなたのテーブルのカラムはタイムスタンプ(DateTime)を持っているのであれば、それは(ない12.00 AMから)をそのタイムスタンプの後にレコードを削除します

2
public ActionResult DeleteOldLogs() 
{ 
    var datesToRemove = OldDates(); 
    using (context) 
    { 
    foreach (var item in datesToRemove) 
    { 
     context.Loggs.Remove(item); 
     context.SaveChanges(); 
    } 
    } 
} 
+0

Greate guys ...ありがとうございました。あなたの作業中のgreate ... –

関連する問題