如何在 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 一样使用它以避免一个非常常见的问题。
这是我的模型:
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 一样使用它以避免一个非常常见的问题。