Подтвердить что ты не робот

LINQ SELECT FIRST ROW

Как выбрать первую строку в инструкции выбора linq без использования foreach?

Я использую foreach, а затем break;, но это должен быть лучший способ?

Мне нравится получать значение в первой строке; плюс проверьте, не найден ли строка. Моя проблема - получить значение без инструкции foreach.

Что я делаю, это найти значение в моем DataTable, и я знаю, что строка uniqe; поэтому мне нравится делать выбор и получать значение; плюс сделать проверку, если нет хита, чтобы быть в безопасности...:)

Это код, который я использую сейчас, см. ниже

Спасибо, Руна

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;
}
4b9b3361

Ответ 1

Просто используйте .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
}

Ответ 2

.First() будет принимать только первое или .Single() будет принимать первое и возбуждать исключение, если есть больше

Ответ 3

У меня возникла проблема с порядком элемента (OrderBy), когда я использую FirstOrDefault для поиска первого элемента из списка.

Я бы предложил вам использовать TAKE для получения первого элемента:

var_QUERY_linq.Take(1).FirstOrDefault()

* Всегда используйте sql-профайлер, если это возможно, чтобы проверить запрос, отправленный на SQL-сервер.

Ответ 4

Я предполагаю, что MyField - это поле, которое вы хотите получить значение

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

Вы также можете установить результат по умолчанию, отличный от NULL. Например:

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

И не беспокойтесь, Intellisense поможет вам таким образом.