2016-08-24 10 views
0

where条件に一致するList<T>のすべてのレコードを削除しようとしています。私がlinqで見つけたのはRemoveAll()メソッドですが、リスト内のcomplete rowの代わりに条件に一致するプロパティを削除するだけで動作するようです。linqを使用して条件に一致するすべてのリスト行を削除する方法は?

だから私は"argument null exception".

質問原因Where句と一緒にsuggested hereとして削除すべてを試してみました:

がどのようREMOVEALLリスト行はLINQを使用して条件に合致することができますか?

//Sort the list by the UpdatedTime time descending 
//Remove all records in list that are older than today's date and status equal to BB. Then order the remaining records desc. 
var cuttOff = DateTime.UtcNow.AddDays(-10); 
List<Escalation> escHistorySorted = escHistory.RemoveAll.Where(x => x.UpdatedTime <= cuttOff && x.status == "BB").OrderByDescending(d => d.UpdatedTime).ToList(); 
+1

** **の状態を反転しますか?したがって、**リスト escHistorySorted = escHistory.Where(x =>!(x.UpdatedTime <= cuttOff && x.status == "BB"))**。または、私はあなたがここで求めているものを得られなかったかもしれません:)。 – MrClan

答えて

2

あなたは一度にあまりにも多くをやっているようです。

最初にレコードを削除して(where句の述語を直接RemoveAllの中に移動して)、並べ替えます。

var cuttOff = DateTime.UtcNow.AddDays(-10); 

escHistory.RemoveAll(x => x.UpdatedTime <= cuttOff && x.status == "BB"); 

List<Escalation> escHistorySorted = escHistory.OrderByDescending(d => d.UpdatedTime).ToList(); 

RemoveAllの戻り値は、削除されたレコードの数を表す整数であるので、あなたは、単にそのメソッドを呼び出した結果を注文することはできません。

+0

RemoveAllのint結果に対してOrderByDescendingを呼び出すことはできません。 –

関連する問題