使用 lambda 表达式过滤 ObservableCollection 列表
Filter on ObservableCollection list using lambda expression
我想知道是否有人告诉我为什么 Queries
(ObservableCollection
的列表)的过滤在我下面的代码中不起作用? Queries.List.Where(x => x.Name.Equals(value))
总是有整个列表..没有过滤。我的 lambda 表达式有问题吗?
视图模型:
namespace DataRetrieval.ViewModel
{
public class QueriesViewModel:BindableBase
{
public QueriesViewModel()
{
Queries = new Queries();
for (int i = 0; i < 5; ++i)
{
var query = new Query { Name = "Query "+i.ToString() };
Queries.List.Add(query);
}
}
private Queries _queries;
public Queries Queries
{
get { return _queries; }
set { SetProperty(ref _queries, value); }
}
private string _filter1;
public string Filter1
{
get { return _filter1; }
set {
SetProperty(ref _filter1, value);
filterlist(Filter1);
}
}
private void filterlist(string value)
{
Queries.List.Where(x => x.Name.Equals(value));
}
}
}
型号:
public class Queries : BindableBase
{
private ObservableCollection<Query> _list;
public ObservableCollection<Query> List
{
get { return _list ?? (_list = new ObservableCollection<Query>()); }
set { SetProperty(ref _list, value); }
}
}
public class Query:BindableBase
{
private string _name;
public string Name
{
get { return _name; }
set {
SetProperty(ref _name, value);
}
}
private string _type;
public string Type
{
get { return _type; }
set { SetProperty(ref _type, value); }
}
private QDatatables _tables;
public QDatatables Tables
{
get { return _tables; }
set { SetProperty(ref _tables, value); }
}
}
Queries.List.Where()
return 是一个新值,所以要么将其设置回 Queries.List(正如@Valera 在他的评论中所说),要么像这样设置 return:
Queries.List = Queries.List.Where(x => x.Name.Equals(value));
或
return Queries.List.Where(x => x.Name.Equals(value));
编辑: returning 不起作用,因为它在 void 函数中,您必须更改它,或使用 @Valera 的方法。
Queries.List = new ObservableCollection<Query>(Queries.List.Where(x => x.Name.Equals(value)));
我想知道是否有人告诉我为什么 Queries
(ObservableCollection
的列表)的过滤在我下面的代码中不起作用? Queries.List.Where(x => x.Name.Equals(value))
总是有整个列表..没有过滤。我的 lambda 表达式有问题吗?
视图模型:
namespace DataRetrieval.ViewModel
{
public class QueriesViewModel:BindableBase
{
public QueriesViewModel()
{
Queries = new Queries();
for (int i = 0; i < 5; ++i)
{
var query = new Query { Name = "Query "+i.ToString() };
Queries.List.Add(query);
}
}
private Queries _queries;
public Queries Queries
{
get { return _queries; }
set { SetProperty(ref _queries, value); }
}
private string _filter1;
public string Filter1
{
get { return _filter1; }
set {
SetProperty(ref _filter1, value);
filterlist(Filter1);
}
}
private void filterlist(string value)
{
Queries.List.Where(x => x.Name.Equals(value));
}
}
}
型号:
public class Queries : BindableBase
{
private ObservableCollection<Query> _list;
public ObservableCollection<Query> List
{
get { return _list ?? (_list = new ObservableCollection<Query>()); }
set { SetProperty(ref _list, value); }
}
}
public class Query:BindableBase
{
private string _name;
public string Name
{
get { return _name; }
set {
SetProperty(ref _name, value);
}
}
private string _type;
public string Type
{
get { return _type; }
set { SetProperty(ref _type, value); }
}
private QDatatables _tables;
public QDatatables Tables
{
get { return _tables; }
set { SetProperty(ref _tables, value); }
}
}
Queries.List.Where()
return 是一个新值,所以要么将其设置回 Queries.List(正如@Valera 在他的评论中所说),要么像这样设置 return:
Queries.List = Queries.List.Where(x => x.Name.Equals(value));
或
return Queries.List.Where(x => x.Name.Equals(value));
编辑: returning 不起作用,因为它在 void 函数中,您必须更改它,或使用 @Valera 的方法。
Queries.List = new ObservableCollection<Query>(Queries.List.Where(x => x.Name.Equals(value)));