2014-09-18 6 views
0

У меня возникла странная проблема, в которой оператор linq возвращает несколько объектов, хотя он имеет .FirstOrDefault().Linq FirstOrDefault, возвращающий несколько

var endlog = from e in endLogs 
      where e.user_id == log.user_id && e.end_time <= log.start_time 
      group e by e.end_time into g 
      select g.OrderByDescending(x => x.end_time).FirstOrDefault(); 

user_state_log eLog = endlog.SingleOrDefault(); 

Что это делает, выбрав журнал с самого последнего времени окончания по сравнению с поставляемой log. Я получаю исключение на user_state_log eLog = endlog.SingleOrDefault(), заявляя, что в переменной имеется более одного объекта. Есть идеи?

+0

типа 'endLogs' /' é' это? – Mephy

+3

Нужны скобки вокруг всего заявления перед FirstOrDefault –

ответ

2

Вы действительно хотите использовать group e by вместо orderby? Существует вероятность того, что группировка будет содержать несколько объектов.

1

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

Вы могли бы предназначены для FirstOrDefault применить к запросу, а не проекции (select):

var endlog = (from e in endLogs 
      where e.user_id == log.user_id && e.end_time <= log.start_time 
      group e by e.end_time into g 
      select g.OrderByDescending(x => x.end_time)).FirstOrDefault(); 
+0

Это была комбинация между вашим и @DreamBuildLabs ответом, который смог его исправить. Мне нужен «порядок», но также нужны скобки. – JRLambert

Смежные вопросы