2

SQL私がこのクエリを実行しようとしていると仮定します

Select * from MyTable where SomeCondition=true

私は現在、上記のクエリにこのラムダ式を使用しています

using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable=>myTable.SomeCondition.Equals(true)).SingleOrDefault();
}

これは正しい方法ですか、それともこのようなことをする必要がありますか

using(var db=new DataClasses1DataContext())
    {
    var result=db.MyTable.Where(myTable=>myTable.SomeCondition.Equals(true)).Select(myTable=>myTable).SingleOrDefault();
    }

誰かが私にそのようなタイプのクエリを行う正しい方法を提案できますLambdaか?

どんな提案でも大歓迎です。

4

5 に答える 5

4

フィルタリングし、恒等変換を実行し、次にを使用しているSingleOrDefaultすると、そのすべてを実行できます。そのオーバーロードにSingleOrDefaultは述語が必要です。

using (var db = new DataClasses1DataContext())
{
    var result = db.MyTable.SingleOrDefault(myTable => myTable.SomeCondition);
    // Use result...
}

FirstOrDefault代わりに、ここで使用することもできます。)

于 2012-07-25T09:44:47.390 に答える
3

この部分が必要かどうか尋ねていますか?

.Select(myTable=>myTable)

答えはいいえだ。アイテムのリストを同じアイテムのリストに変換します。ラムダ:

x => x

渡されたものを正確に返す「恒等関数」です。

NB

FirstOrDefaultの代わりに、他のいくつかの回答がアドバイスされていSingleOrDefaultます。クエリが複数のレコードを返す可能性があり、OrderBy句がない場合、データベースはランダムな順序で結果を返す可能性があります。つまり、使用することFirstOrDefaultは「ランダムに1つ選ぶ」と言うようなものです。

すべてのレコードが(ある意味で)「十分に良い」場合、それは問題ないかもしれません。OrderByそうでない場合は、最初のレコードが「最良の」レコードになるように句を追加する必要があります。または、条件に一致するすべてのレコードに対してアクションを実行する場合は、 FirstOrDefaultSingleOrDefault`も使用しないでください。結果をループするだけです。

最後に(以下のコメントに基づいて)一致するレコードがあるかどうかを知りたいが、その内容を調べたくない場合は、を使用しますAny

于 2012-07-25T09:38:00.580 に答える
2

次のように使用できます。

using(var db = new DataClasses1DataContext())

{{

var result=db.MyTable.Where(x=>x.SomeCondition.Equals(true));

}

今、あなたは結果を得るでしょう

于 2012-07-25T09:46:16.020 に答える
1

テーブルを投影したくない場合は、selectも必要ありません。

using(var db=new DataClasses1DataContext())
{
    var result=db.MyTable.Where(myTable => myTable.SomeCondition);
}
于 2012-07-25T09:37:52.360 に答える
1

ステートメントの最後に以下のコードを追加する必要はありません。

SingleOrDefault()

そのために次のコードを使用します。

using(var db=new DataClasses1DataContext())
{
    var result=db.MyTable.Where(myTable=>myTable.SomeCondition);
}
于 2012-07-25T09:45:05.943 に答える