LINQ SELECT FIRST ROW - PullRequest
       14

LINQ SELECT FIRST ROW

16 голосов
/ 03 октября 2009

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

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

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

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

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

Спасибо, Rune

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

Ответы [ 4 ]

39 голосов
/ 03 октября 2009

Просто используйте .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
}
4 голосов
/ 03 ноября 2009

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

3 голосов
/ 03 ноября 2009

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

Я бы предложил вам использовать TAKE, чтобы получить первый предмет:

var_QUERY_linq.Take(1).FirstOrDefault()

* Всегда используйте sql profiler, если это возможно, для проверки запроса, отправляемого на SQL-сервер.

0 голосов
/ 03 октября 2009

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

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

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

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

И не волнуйтесь, Intellisense поможет вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...