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.AddedDatelstUsers=(来自lstUsers中的用户,其中user.AddedDate>dateTime1&&user.AddedDate
这里是dateTime1=01/01/2009和dateTime2=02/02/2010LINQ非常适合这一点:
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();