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;
}
.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
}
FirstOrDefaultを使用してリストから最初の項目を検索すると、項目の順序(OrderBy)の問題が発生しました。
TAKEを使用して最初のアイテムを取得することをお勧めします。
var_QUERY_linq.Take(1).FirstOrDefault()
* SQLサーバーに送信されるクエリをチェックする場合は、可能な限り常にSQLプロファイラーを使用してください。
.First()は最初のものだけを取るか、.Single()は最初のものを取り、さらにある場合は例外を発生させます
MyFieldは値を取得したいフィールドであると思います
var result = vm_Table_Pk.DefaultIfEmpty().First().MyField;
NULL以外のデフォルトの結果を設定することもできます。お気に入り :
var result = vm_Table_Pk.DefaultIfEmpty("Missing").First().MyField;
Intellisenseがこの方法であなたを助けることを心配しないでください。