C# 搜索并创建新列表<&燃气轮机;

C# 搜索并创建新列表<&燃气轮机;,c#,asp.net,list,C#,Asp.net,List,我有返回列表的函数,如下所示 List<User> lstUsers = SearchUsers(searchText); List lstUsers=SearchUsers(searchText); 其结果如下所示 Username AddedDate -------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009 用户名添加日期 --------

我有返回列表的函数,如下所示

 List<User> lstUsers = SearchUsers(searchText);
List lstUsers=SearchUsers(searchText);
其结果如下所示

Username AddedDate
-------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009 用户名添加日期
-------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009 它给出了一个reult,这不是问题。我想按日期创建新的列表筛选器。例如,只需要一个介于日期
01/01/2009
02/02/2010
之间的结果。asp中是否有任何方法可以筛选列表。
List-lstFilterUsers=\\此处需要帮助(Filterd-new-List)

谢谢。

您可以使用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();
var dateFrom=DateTime.Parse(“01/01/2009”);
var dateTo=DateTime.Parse(“02/02/2010”);
lstUsers.Where(u=>u.AddedDate>=dateFrom&&u.AddedDate
lstUsers=(来自lstUsers中的用户,其中user.AddedDate>dateTime1&&user.AddedDate

这里是dateTime1=01/01/2009和dateTime2=02/02/2010

LINQ非常适合这一点:

List<User> filteredUsers = lstUsers.Where(u => u.AddedDate >= dateFrom && u.AddedDate <= dateTo).ToList();
然后将列表绑定到网格:

gdvUsers.DataSource = SearchUsers(dateFrom, dateTo);
gdvUsers.DataBind();

正如其他人所说,Linq是解决此问题的方法。您应该记住的一件事是过滤发生在何处。当您在列表上使用where子句时,列表的全部内容将加载到内存中并应用过滤器。如果您在实现IQueryable的类型上执行where子句,则数据源负责过滤数据。如果您在数据库或ODATA源中搜索,这会产生巨大的影响。

有没有关于将上述
委托给
DataSource
用于网格的想法。我使用
gdvUser.DataSource=(filteredUsers);
但它给出null.Thank。在设置数据源后,您可能必须在网格上调用DataBind,例如,
gdvUser.datasource=filteredUsers;gdvUser.DataBind()
如果结果仍然为空,请确保您的筛选器不可能太窄。在数据库中,日期的格式为
2011-12-30 17:40:42.727
,当我们搜索给定日期时,只有
mm/yy/dd
。没有任何时间。我认为这是个问题?有任何解决问题的方法吗?谢谢。
User.AddedDate是什么数据类型?如果是
日期时间
,则在筛选时可能必须将搜索字符串转换为日期时间对象。请参阅我编辑的答案。
List<User> filteredUsers = lstUsers.FindAll(delegate(User u) 
{
    return u.AddedDate >= dateFrom && u.AddedDate <= dateTo;
});
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();