これは非常に簡単なはずですが、なぜ私のすべてのメソッドが機能していないのか分かりません。あるリストから別のリストにある要素を削除してください
私はすべてのソリューションを見て、適切に使用しましたが、結果が得られません。
ソリューションはここ
が含まれるコードです:
var filteredList = (available.Except(selected)).ToList;
除き使用
IEnumerable<feature> available = _repo.GetAvailableFeatures();
IEnumerable<feature> selected = _repo.GetSelectedFeatures();
for (var i = 0; i < availableList.Count - 1; i++)
{
foreach (var t in selectedList)
{
if (availableList[i].Id == t.Id)
{
availableList.RemoveAt(i);
}
}
}
マイフィーチャークラスの古いファッションを使用してLINQの
var availableList = available.ToList();
var selectedList = selected.ToList();
availableList.RemoveAll(item => selectedList.Contains(item));
を使用して
は次のようになります。
public class Feature
{
public int Id;
public int Desc;
}
誰もがここで私の過ちを見ることができますか?
正確には動作しません。 –
(メモリ内オブジェクトではなくデータベースアクセスを前提としています) 'Feature'は' .Equals'と '.GetHashCode'をオーバーライドしません。すべてのアイテムは一意であるとみなされます。 – Caramiriel
'Feature'クラスで' Equal'と 'GetHashCode'をオーバーライドするか、カスタム等価比較子を使って' Except'を使う必要があります。 –