web-dev-qa-db-ja.com

List <t>コレクションでメソッドを選択します

Asp.netアプリケーションを使用していますが、現在、データ操作にデータセットを使用しています。最近、このデータセットをリストコレクションに変換し始めました。しかし、一部の場所では機能しません。 1つは、古いバージョンでdatarow[] drow = dataset.datatable.select(searchcriteria)を使用していることです。しかし、Listコレクションには、特定の値を見つけるための方法はありません。検索条件に従って値を選択する方法はありますか?これが可能かどうか知りたい。私を助けてください。

48
MAC

さて、List<T>doesで始めるには、 FindAll および ConvertAll メソッドがあります-しかし、より慣用的で現代的なアプローチは、LINQを使用することです。

// Find all the people older than 30
var query1 = list.Where(person => person.Age > 30);

// Find each person's name
var query2 = list.Select(person => person.Name);

これを機能させるには、ファイルにusingディレクティブが必要です。

using System.Linq;

これらは述語とプロジェクトを表現するために文字列を使用しないことに注意してください-通常は上記のラムダ式から作成されたデリゲートを使用します。

ラムダ式とLINQが初めての場合は、まず LINQ in ActionPro LINQC#4などのLINQを扱う本を入手することをお勧めします簡単に言えば または自分の C#の詳細 。確かにcanだけでWebチュートリアルからLINQを学ぶことができますが、それは非常に重要な技術だと思うので、時間をかけて徹底的に学ぶ価値があります。

143
Jon Skeet

あなたも試すことができます

var query = from p in list
            where p.Age > 18
            select p;
8
anishMarokey

これを試して:

using System.Data.Linq;
var result = from i in list
             where i.age > 45
             select i;

ラムダ式を使用するには、次のステートメントを使用してください。

var result = list.where(i => i.age > 45);
4
Hemant Kumar

ジェネリック List<T> には、データのフィルタリングに使用できる Where<T>(Func<T, Boolean>) 拡張メソッドがあります。

行配列の場合:

var rows = rowsArray.Where(row => row["LastName"].ToString().StartsWith("a"));

DataRowCollection を使用している場合は、最初にキャストする必要があります。

var rows = dataTableRows.Cast<DataRow>().Where(row => row["LastName"].ToString().StartsWith("a"));
3
Danil

スクリプトを使用しましたが、参加するために、おそらくあなたを助けることができます

string Email = String.Join(", ", Emails.Where(i => i.Email != "").Select(i => i.Email).Distinct());
0
Luiz Pampu