2011-01-22 2 views
0

У меня есть запросвозвращение одного результата с помощью LINQ

row.GetChildRows("EventCategoryRelation") 
    .Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
    .Select(x => Int32.Parse(x["category_id"].ToString())) 

Этот запрос возвращает IEnumerable. Я ожидая ВНУТР

помочь мне изменить мой запрос LINQ

+0

однако это возвращает DataRowCollection, который не то, что я ожидаю вернуть бот целым числом. –

ответ

2

Если вы ожидаете, что ваш запрос только возвращать одно значение с помощью метода Single расширения.

row.GetChildRows("EventCategoryRelation") 
    .Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
    .Select(x => Int32.Parse(x["category_id"].ToString())) 
    .Single(); 

Обратите внимание, что Single будет выдавать исключение, если нет значения. Если это не то, что вы хотите, используйте SingleOrDefault.

+0

Возвращаемое значение будет Int32, он разбирает строку до Int32 –

+0

@K Иванов: вы правы, я неправильно читаю круглые скобки. –

1

Вы всегда можете добавить это в конце вашего запроса:

.Single(); 

Это возвращает одно значение, если ваш перечислимы содержит только один, или выбросить исключение, если оно содержит другую сумму, чем один.

0

В зависимости от ваших данных добавить .FirstOrDefault, .SingleOrDefault(), .First() и т.д.

ow.GetChildRows("EventCategoryRelation") 
    .Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
    .Select(x => Int32.Parse(x["category_id"].ToString())).FirstOrDefault() 

Когда вы ожидаете несколько строк, используйте первую (FirstOrDefault, если вы не хотите исключение, если есть не дали никаких данных). Несколько строк будут генерировать исключение на Single или SingleOrDefault.

0

Добавить пункт First() к запросу:

row.GetChildRows("EventCategoryRelation") 
    .Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
    .Select(x => Int32.Parse(x["category_id"].ToString())) 
    .First() 

Вы можете использовать FirstOfDefault() в случае, если нет никаких результатов, так как First() сгенерирует исключение в этом случае.

0

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

row.GetChildRows("EventCategoryRelation") 
.Where(categoryRow => categoryRow["event_id"].ToString() == eventObject.EventId.ToString()) 
.SingleOrDefault(x => Int32.Parse(x["category_id"].ToString())) 
Смежные вопросы