我有以下给出的返回列表功能。
List<User> lstUsers = SearchUsers(searchText);
给出如下结果
的结果Username AddedDate
-------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009
它给出了一个不是问题的结果。我想按日期创建新的列表过滤器。例如,只想在日期01/01/2009
和02/02/2010
之间得到一个结果。是否有任何方法在asp中过滤列表。
List<User> lstFilterUsers = \\Want Help Here(Filterd new List);
感谢。
答案 0 :(得分:3)
LINQ非常适合:
List<User> filteredUsers = lstUsers.Where(u => u.AddedDate >= dateFrom && u.AddedDate <= dateTo).ToList();
如果您不能使用LINQ,请改为使用委托:
List<User> filteredUsers = lstUsers.FindAll(delegate(User u)
{
return u.AddedDate >= dateFrom && u.AddedDate <= dateTo;
});
编辑:如果您正在处理搜索字符串,并且您的AddedDate
属性类型为DateTime
,则必须先进行一些字符串解析,例如:< / p>
private List<User> SearchUsers(string dateFrom, string dateTo)
{
List<User> filteredUsers = lstUsers.FindAll(delegate(User u)
{
return u.AddedDate >= DateTime.Parse(dateFrom) && u.AddedDate <= DateTime.Parse(dateTo);
});
}
然后将列表绑定到您的网格:
gdvUsers.DataSource = SearchUsers(dateFrom, dateTo);
gdvUsers.DataBind();
答案 1 :(得分:0)
您可以使用LINQ扩展方法:
var dateFrom = DateTime.Parse("01/01/2009");
var dateTo = DateTime.Parse("02/02/2010");
lstUsers.Where(u=> u.AddedDate >= dateFrom && u.AddedDate <= dateTo).ToList();
答案 2 :(得分:0)
lstUsers = (from user in lstUSers where user.AddedDate > dateTime1 && user.AddedDate < dateTime2 select user).ToList();
此处为dateTime1 = 01/01/2009,dateTime2 = 02/02/2010
答案 3 :(得分:0)
正如其他人所说,Linq是解决这个问题的方法。您应该记住的一件事是过滤发生在哪里。在列表中使用Where子句时,列表的全部内容将加载到内存中并应用过滤器。如果对实现IQueryable的类型执行Where子句,则数据源负责过滤数据。如果您在数据库或ODATA源中搜索,这会产生巨大的影响。