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

时间:2015-04-22 13:42:58

标签: c# models

这是我的模特:

    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);

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

试试这个:

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

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

答案 3 :(得分:-1)

如果您想删除所有项目,可以使用:

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 =&gt; x.ObsName == myName);

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