如何在 C# 中从我的模型中删除特定集合

How do i remove a specific collection from my model in C#

这是我的模型:

    public class ObsModel : BindableBase
    {


        private String _ObsName = string.Empty;
        public string ObsName
        {
            get { return this._ObsName; }
            set { this.SetProperty(ref this._ObsName, value); }
        }

        private String _ObsColor = string.Empty;
        public string ObsColor
        {
            get { return this._ObsColor; }
            set { this.SetProperty(ref this._ObsColor, value); }
        }

        private String _ObsValue = string.Empty;
        public string ObsValue
        {
            get { return this._ObsValue; }
            set { this.SetProperty(ref this._ObsValue, value); }
        }
}

然后我可以使用这个对象填充我的模型。

ObservableCollection<ObsModel> LastObsResults = new ObservableCollection<ObsModel>();

但是,如果我使用以下代码将观察名称作为字符串变量,我该如何删除特定集合?

LatsObsResults.Remove( What DO I PUT HERE);

此解决方案使用 LINQ .Where 生成结果的有效子集,然后将该子集分配给新的 ObsevableCollection。我正在使用 constructor that accepts an IEnumerable

var validSubset = LastObsResults.Where(obs => obs.ObsName != name);
LastObsResults = new ObservableCollection<ObsModel>(validSubset);

试试这个:

var lastObsUpdated = LastObsResults.Except(model => model.ObsName == "Whatever")
                                   .ToList()
                                   .AsObservable();

这将为您创建一个更新的 ObservableCollection,其中包含除命名项之外的所有项。

您可以通过传入要删除的对象来从集合中删除对象。这可以像这样通过 Linq 完成:

LastObsResults.Remove(LastObsResults.FirstOrDefault(obs => obs.ObsName == name));

如果你想删除所有项目,你可以使用这个:

LastObsResults .Clear();

如果您想创建自己的扩展方法,您可以这样做:

public static class ObservableCollectionExtensions
{
    public static int Remove<T>(
        this ObservableCollection<T> coll, Func<T, bool> condition)
    {
        var itemsToRemove = coll.Where(condition).ToList();

        foreach (var item in itemsToRemove)
        {
            coll.Remove(item);
        }

        return itemsToRemove.Count;
    }
}

使用上面的扩展程序,您可以删除所有符合条件的项目。示例:

LastObsResults.Remove(x=> x.ObsName == 我的名字);

最后,您可以使用现有的 collection.Remove() 方法,但请确保您像 described here 一样使用它以避免一个非常常见的问题。