2012-01-20 15 views
1

以下のようなリストを返す関数があります。新しいリストを検索して作成する<>

Username AddedDate
-------- --------- sa 02/02/2010 ba 02/02/2011 ta 02/02/2009

その下の
のような結果を与える

List<User> lstUsers = SearchUsers(searchText); 

はproblem.Iは、日付によって新しいリストフィルタを作成したくないですreultを与えます。たとえば、日付が01/01/200902/02/2010の間の結果が必要な場合があります。リストにフィルタをかけるための方法はありますか?
List<User> lstFilterUsers = \\Want Help Here(Filterd new List);
ありがとうございました。

答えて

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; 
}); 

EDIT:あなたが検索文字列を扱っている場合は、あなたのAddedDate特性は例えば、あなたが最初に解析し、いくつかの文字列を行う必要がありますDateTime型のものである:

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(); 
+0

上記の 'delegate'をgrid.Iの' DataSource'に使用する方法については、 'gdvUser.DataSource =(filteredUsers);'を使用しますが、nullを返します。 –

+0

データソースを設定した後、グリッド上でDataBindを呼び出す必要があります。 'gdvUser.DataSource = filteredUsers; gdvUser.DataBind(); '結果がまだ空白の場合は、フィルタが狭すぎる可能性がないことを確認してください。データベース日付の – tobias86

+0

は'2011-12-30 17:40:42.727'の形式であり、指定された日付を検索するときには 'mm/yy/dd'しかありません。時間はありません。これは問題だと思いますか?問題を解決するためのアイデア。 –

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(); 
0
lstUsers = (from user in lstUSers where user.AddedDate > dateTime1 && user.AddedDate < dateTime2 select user).ToList(); 
ここ

datetime1で= 2009年1月1日とDATETIME2 = 2010年2月2日

0

は、LINQのは、この問題を解決するために移動するための方法であると述べています。あなたが覚えておかなければならないことの1つは、フィルタリングがどこに起こるかです。リストでWhere句を使用すると、リストの内容全体がメモリにロードされ、フィルタが適用されます。 IQueryableを実装する型でWhere句を実行すると、データソースはデータをフィルタリングします。データベースやODATAソースを検索している場合、これは大きな意味を持ちます。

関連する問題