2013-09-23 5 views
-1

У меня есть запрос LINQ, и в нем должен быть WHERE clausle.AsEnumerable with Where in it

var query = DbProvider.DB.AsEnumerable().Where(p => p.Accepte.HasValue).OrderByDescending(p => p.Score).Select((user, index) => new 
       { 
        user.Id, 
        user.Score, 
        index 
       }) 
       .Where(user => user.Id == Id).FirstOrDefault(); 

если я удалить .Where(p => p.Accepte.HasValue) это работает, но позиция неверна. Потому что он включает недопустимых пользователей.

Когда я добавляю .Where(p => p.Accepte.HasValue), он возвращает null.

Как его использовать?

+7

Если она возвращает нуль, это означает, что нет пользователей, где 'Accepte' имеет значение. Это использование 'FirstOrDefault' – CodingIntrigue

+0

В чем вопрос? –

+0

В последней строке вы также можете использовать '.FirstOrDefault (user => user.Id == Id);' – Spontifixus

ответ

1

Если свойство Accepte является nullable булева вам также необходимо проверить само значение, путем оценки Value -свойства, потому что HasValue -свойство обнуляемого типа просто указует на то, есть ли доступное значение или нет. Его в основном проверка, является ли значение null или нет.

Так для того чтобы достигнуть вашей цели использовать следующий код:

var query = DbProvider.DB 
    .AsEnumerable() 
    .Where(p => p.Accepte.HasValue && p.Accepte.Value) 
    .OrderByDescending(p => p.Score).Select((user, index) => new 
      { 
       user.Id, 
       user.Score, 
       index 
      }) 
    .FirstOrDefault(user => user.Id == Id);