回答:
linqクエリ構文がどれだけ好きかによって、次のような拡張メソッドを直接使用できます。
var item = Items.First(i => i.Id == 123);
リストが空の場合にエラーをスローしたくない場合はFirstOrDefault
、要素タイプのデフォルト値(null
参照タイプの場合)を返すuse を使用します。
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
とSingleOrDefault()
にも使用することができますが、データベースか何かから読んでいる場合は、すでに保証は、それはそこに任意の重複をだとスローかどうかを確認するために、リストをスキャンしているとして、私は気にしないだろう一意性ということができます。 First()
そしてFirstOrDefault()
彼らは、より効率的であるので、最初の試合でストップ。
First()
とSingle()
家族のうち、ここで彼らが投げます:
First()
-空/見つからない場合はスローし、重複する場合はスローしませんFirstOrDefault()
-空/見つからない場合はデフォルトを返し、重複する場合はスローしませんSingle()
-空/見つからない場合にスロー、重複が存在する場合にスローSingleOrDefault()
-空/見つからない場合はデフォルトを返し、重複が存在する場合はスローしますi.Id == 123
FirstOrDefaultまたはSingleOrDefaultは、シナリオに応じて、また、一致が0であるか複数であるかを処理するかどうかによって、役立つ場合があります。
FirstOrDefault:シーケンスの最初の要素、または要素が見つからない場合のデフォルト値を返します。
SingleOrDefault:シーケンスの唯一の要素、またはシーケンスが空の場合はデフォルト値を返します。シーケンスに複数の要素がある場合、このメソッドは例外をスローします
これがlinqの「from」クエリでどのように機能するかはわかりませんが、ラムダ構文では次のようになります。
var item1 = Items.FirstOrDefault(x => x.Id == 123);
var item2 = Items.SingleOrDefault(x => x.Id == 123);
これらは、推奨される方法です。
var item = Items.SingleOrDefault(x => x.Id == 123);
または
var item = Items.Single(x => x.Id == 123);
拡張メソッド構文を使用できます。
var item = Items.Select(x => x.Id == 123).FirstOrDefault();
それ以外に、独自の「First」および「FirstOrDefault」拡張メソッドを作成せずに、どれだけ簡潔にできるかはわかりません。
Where
対照的にSelect
、ということですが、この答えは正しくありません。c#で選択すると、結果がIEnumerable <bool>に変更されるbool
ため、最初の項目のを取得しますx.Id == 123
私がうまくいったことを教えてあげましょう:
int id = int.Parse(insertItem.OwnerTableView.DataKeyValues[insertItem.ItemIndex]["id_usuario"].ToString());
var query = user.First(x => x.id_usuario == id);
tbUsername.Text = query.username;
tbEmail.Text = query.email;
tbPassword.Text = query.password;
私のIDは、クエリを実行する行です。この場合、radGridから取得し、それを使用してクエリを実行しましたが、このクエリは行を返し、クエリから取得した値をテキストボックスなどに割り当てることができます。 、私はそれらをテキストボックスに割り当てる必要がありました。
Single()
とSingleOrDefault()
、私が知っていればデータがあるため、(その制約を持つデータベースなどから例えば)すでにユニークであるSingle()
ことが可能重複を見つけるために、リストの残りの部分をスキャンする力が、それは私です。この時点で一意性を強制する必要があるSingle()
場合は、First()
ファミリーを使用します。そうでない場合は、ファミリーを使用します。