2014-02-19 4 views
2

Я работаю с Entity Framework 6 в MVC 5.Почему Select возвращает логическое значение?

У меня есть следующий метод:

[HttpPost] 
public ActionResult UpdateDetails(ApplicationUser applicationUser) 
{ 
    var context = new ApplicationDbContext(); 
    var user = context.Users.Select(x => x.UserName == applicationUser.UserName).FirstOrDefault(); 

//etc etc 
} 

Пользователи является IDbSet<ApplicationUser>.

Почему я получаю bool от метода Select?

Моим ожиданием было бы вернуть объект ApplicationUser. Почему это не так?

Благодаря

+0

Спасибо, ребята, согласится, когда смогу, я идиот. Еще раз спасибо! – prisoner24601

ответ

6

Select() проектирует элемент последовательности. Поскольку x.UserName == applicationUser.UserName возвращает bool, результат метода будет логическим.

Для чего нужен метод Where. Эта последовательность фильтры на основе указанного предиката:

var user = context.Users.Where(x => x.UserName == applicationUser.UserName).FirstOrDefault(); 

, который может быть сокращен до:

var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName); 

Это возможно, так как this перегрузки FirstOrDefault() принимает предикат фильтра в качестве второго параметра.

1

Ваш выбор возвращает объект, являющийся результатом сравнения.

Изменить на:

var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName); 
1

Это потому, что вы выбираете логическое значение.

Поскольку нет указанного требования, я угадываю ваше требование с вашего запрошенного кода.

используйте нижеследующую линию.

var user=context.Users.Where(user=>user.UserName==applicationUser.UserName).FirstOrDefault(); 
1

Select буквально выбирает что-то внутри аргументов. Итак, если у вас есть выражение, которое возвращает bool, Select вернет bool.

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