如何实现 LINQ 从 A 类型的一个对象集合中提取 Guid,以便他们可以从 B 类型的另一个对象集合中排除这些 Guid。对象 A 和对象 B 都有一个名为“ID”的 Guid 字段。
我有以下内容:
ObservableCollection<Component> component
组件有一个名为ID
type的字段Guid
ObservableCollection<ComponentInformation> ComponentInformationCollection
ComponentInformation 有一个名为ID
type的字段Guid
我的实现:
component =>
{
if (component != null)
{
var cancelledComponents = new List<ComponentInformation>();
foreach (Component comp in component)
{
cancelledComponents.Add(new ComponentInformation() { ID = comp.ID });
}
this.ComponentInformationCollection.Remove(cancelledComponents);
}
});
我相信有一个更优雅的解决方案,我一直在努力解决,但我一直遇到的问题是创建一个“新的 ComponentInformation”,这样类型就不会给我错误。
====== 最终解决方案 =======
var cancelledComponentIDs = new HashSet<Guid>(component.Select(x => x.ID));
this.ComponentInformationCollection.Remove(
this.ComponentInformationCollection.Where(x => cancelledComponentIDs.Contains(x.ID)).ToList());
谢谢:Jason - 我用这个作为我最终解决方案的模板(如下所列)。Servy - 虽然我可以使用比较器,但我认为对于这种特殊情况,比较器不是必需的,因为它是一次性使用类型的情况。
ComponentInformationCollection 是一个 Silverlight DependencyProperty,它会在更改时触发 INotifyChangedEvent(MVVM 模式),因此上述解决方案最适合我的情况。