搜索并创建新的列表<>

时间:2012-01-20 05:59:02

标签: c# asp.net list

我有以下给出的返回列表功能。

 List<User> lstUsers = SearchUsers(searchText);

给出如下结果

的结果
Username    AddedDate
-------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009

它给出了一个不是问题的结果。我想按日期创建新的列表过滤器。例如,只想在日期01/01/200902/02/2010之间得到一个结果。是否有任何方法在asp中过滤列表。
 List<User> lstFilterUsers = \\Want Help Here(Filterd new List);
感谢。

4 个答案:

答案 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源中搜索,这会产生巨大的影响。