6

実際には、次のより近い複製です:
RemoveAll for ObservableCollections?

重複の可能性:
LINQ を使用して List<T> 内のオブジェクトを削除する

これは私が使用しているコードですが、あまり読みにくいです。LINQ を使用して、同じ機能を維持しながら以下のコードを短縮できますか?

int index = 0;
int pos = 0;

foreach (var x in HomeViewModel.RecentPatients)
{
   if (x.PID == p.PID)
       pos = index;
   else
       index++;

}

HomeViewModel.RecentPatients.RemoveAt(pos); 
4

2 に答える 2

5

重複閉鎖の混乱についてお詫び申し上げます。この質問とマークされた回答により、監視可能なコレクションから削除するための拡張メソッドのサポートが可能になります。

ObservableCollectionsのRemoveAll?

構文はサポートされませんfrom x in yが、次のことが可能になります。

var c = new ObservableCollection<SelectableItem>();
c.Remove(x => x.IsSelected);

ただし、チェックx.PID == p.PIDと他の質問に関するメモを使用して...実際に両方のリストにあるアイテムを削除したい場合は、これが最善のオプションではない可能性があります。

拡張メソッドは、引数として提供された列挙型にあるアイテム(このExcept場合は2番目のリスト)を除外するアイテムの列挙型を生成します。このメソッドは、既存の列挙可能オブジェクトを変更しません。ほとんどのアクションのように、新しいアクションを返すため、これを新しいに設定する必要がありますObservableCollection

于 2012-07-16T08:27:30.840 に答える
4

これを試すことができます。

var toRemove = HomeViewModel.RecentPatients.Where(x=>x.PID == pid).ToList();
foreach (var item in toRemove)
    HomeViewModel.RecentPatients.Remove(item);
于 2012-07-16T08:30:13.523 に答える