2014-02-19 39 views
2

我與實體框架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>

爲什麼我從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); 

這是可能的,因爲過載thisFirstOrDefault()需要過濾器謂語作爲第二個參數。

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

相關問題