Asp.netアプリケーションを使用していますが、現在、データ操作にデータセットを使用しています。最近、このデータセットをリストコレクションに変換し始めました。しかし、一部の場所では機能しません。 1つは、古いバージョンでdatarow[] drow = dataset.datatable.select(searchcriteria)
を使用していることです。しかし、Listコレクションには、特定の値を見つけるための方法はありません。検索条件に従って値を選択する方法はありますか?これが可能かどうか知りたい。私を助けてください。
さて、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 Action 、 Pro LINQ 、 C#4などのLINQを扱う本を入手することをお勧めします簡単に言えば または自分の C#の詳細 。確かにcanだけでWebチュートリアルからLINQを学ぶことができますが、それは非常に重要な技術だと思うので、時間をかけて徹底的に学ぶ価値があります。
あなたも試すことができます
var query = from p in list
where p.Age > 18
select p;
これを試して:
using System.Data.Linq;
var result = from i in list
where i.age > 45
select i;
ラムダ式を使用するには、次のステートメントを使用してください。
var result = list.where(i => i.age > 45);
ジェネリック 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"));
スクリプトを使用しましたが、参加するために、おそらくあなたを助けることができます
string Email = String.Join(", ", Emails.Where(i => i.Email != "").Select(i => i.Email).Distinct());