web-dev-qa-db-ja.com

LINQ SELECT FIRST ROW

Foreachを使用せずにlinq selectステートメントの最初の行を選択するにはどうすればよいですか?

私はforeachを使用してから中断します。しかし、それはより良い方法でなければなりませんか?

最初の行の値を取得するのが好きです。さらに、行が見つからないかどうかを確認します。私の問題は、foreachステートメントなしで値を取得することです。

私がやっていることは、DataTableで値を見つけることであり、行が一意であることを知っています。だから私は選択して値を取得するのが好きです。さらに、安全であるヒットがないかどうかを確認します... :)

これは私が現在使用しているコードです。以下を参照してください

ありがとう、ルーン

var var_QUERY_linq = 
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
    where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
    select vm_TABLE_PK;

foreach ( DataRow o_DataRow in var_QUERY_linq )
{
       vmp_Return_string = o_DataRow.Field<string>( "Myfield_nvarchar" );

       break;
}
17
RBC

.FirstOrDefault()を使用するだけです

var var_QUERY_linq = (
    from vm_TABLE_PK in vco_DataTable_PK.AsEnumerable()
    where vm_TABLE_PK.Field<Int32>( "MyField_Int32" ) == vmp_ROW_Counter_Int32
    select vm_TABLE_PK).FirstOrDefault();

if(var_QUERY_linq != null)
{
    //There is a record
}
40
Michael La Voie

FirstOrDefaultを使用してリストから最初の項目を検索すると、項目の順序(OrderBy)の問題が発生しました。

TAKEを使用して最初のアイテムを取得することをお勧めします。

var_QUERY_linq.Take(1).FirstOrDefault()

* SQLサーバーに送信されるクエリをチェックする場合は、可能な限り常にSQLプロファイラーを使用してください。

4
How Lun

.First()は最初のものだけを取るか、.Single()は最初のものを取り、さらにある場合は例外を発生させます

4
Omu

MyFieldは値を取得したいフィールドであると思います

var result = vm_Table_Pk.DefaultIfEmpty().First().MyField;

NULL以外のデフォルトの結果を設定することもできます。お気に入り :

var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField;

Intellisenseがこの方法であなたを助けることを心配しないでください。

1
Tarik