从LINQ到SQL的集合以及筛选功能

从LINQ到SQL的集合以及筛选功能,linq,collections,filtering,Linq,Collections,Filtering,我已经在不止一个论坛上问过这个问题,似乎没有人愿意接受这个问题 我的问题很简单,我想每个人在使用LINQtoSQL时都会遇到这个问题 如果您有一个名为:Person的LINQ对象,并且希望根据数据库中的所有人员创建一个列表框,那么任务很简单: BindingListCollectionView view; view = (BindingListCollectionView)CollectionViewSource.GetDefault (dataContext.Persons); 现在假设您希

我已经在不止一个论坛上问过这个问题,似乎没有人愿意接受这个问题

我的问题很简单,我想每个人在使用LINQtoSQL时都会遇到这个问题

如果您有一个名为:Person的LINQ对象,并且希望根据数据库中的所有人员创建一个列表框,那么任务很简单:

BindingListCollectionView view;
view = (BindingListCollectionView)CollectionViewSource.GetDefault (dataContext.Persons);
现在假设您希望在列表上方有一个文本框来过滤结果。那个 无法工作,因为LINQ to SQL对象实现的IBindingList接口在“CanFilter”属性上返回false

大多数人所做的就是创建一个ObservebleCollection,下面就是一个例子 我相信你们中的大多数人都使用

ObservebleCollection<Person> col = new ObservebleCollection<Person>(dataContext.Persons.ToList());
ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefault(col);
ObservebleCollection col=newobserveblecollection(dataContext.Persons.ToList());
ListCollectionView视图=(ListCollectionView)CollectionViewSource.GetDefault(col);
因为这将返回ListCollectionView而不是BindingListCollectionView 它将是可过滤的,世界上一切都很好

问题来了,假设您有多个级别的外键关系:
Person我认为模型视图模式(MVVM)将在这里帮助您。 为第一个列表框创建一个视图,并确保它将其集合公开为实现INotifyCollectionChanged的内容。第二个和第三个列表框也是如此。 您还可以使其中任何一个包含用于绑定到文本框进行过滤的属性。当值更改时,只需调整列表绑定到的内存中集合

有一个谷歌MVVM,因为它工作得很好。大多数示例都与WPF相关,但仍然适用于您正在做的事情

还可以查看codeplex上名为“Bindable Linq”的产品,它允许您执行以下操作:

var q = from p in Persons.AsBindable() select p;

我认为模型-视图-模型模式(MVVM)将在这里帮助您。 为第一个列表框创建一个视图,并确保它将其集合公开为实现INotifyCollectionChanged的内容。第二个和第三个列表框也是如此。 您还可以使其中任何一个包含用于绑定到文本框进行过滤的属性。当值更改时,只需调整列表绑定到的内存中集合

有一个谷歌MVVM,因为它工作得很好。大多数示例都与WPF相关,但仍然适用于您正在做的事情

还可以查看codeplex上名为“Bindable Linq”的产品,它允许您执行以下操作:

var q = from p in Persons.AsBindable() select p;