2016-11-21 2 views
1

это список выбора в контроллере действия,5 asp.net MVC SelectList с условием где

ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == User.Identity.GetUserName()), "UserName", "UserName"); 

, которые я передаю к виду:

<div class="form-group"> 
      @Html.LabelFor(model => model.UserName, "UserName", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("UserName", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

и это не работает ERRO:

LINQ к Entities не распознает метод 'System.String GetUserName (System.Security.Principal.IIdentity)' метод, и этот метод не может быть переведен в выражение хранилища.

+2

Вы не можете использовать вызов функции 'User.Identity.GetUserName()' в любом выражении Linq. Что вы можете сделать, так это сначала получить значение 'User.Identity.GetUserName()' в переменной, а затем использовать эту переменную в выражении linq. –

ответ

1

Изменение первой линии:

string userName = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == userName).ToList(), "UserName", "UserName"); 

Вы должны добавить ToList() после Where для того, чтобы выполнить запрос и вернуть результаты.

+0

LINQ to Entities не распознает метод 'System.String GetUserName (System.Security .Principal.IIdentity) ', и этот метод не может быть переведен в выражение хранилища. –

+0

Поместите 'User.Identity.GetUserName()' в переменную сперва и убедитесь, что она имеет значение, я отредактировал свой ответ –

+0

спасибо, я проголосовал –

3

GetUserName не может быть переведено в выражение. Попробуйте вот так:

var username = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == username), "UserName", "UserName"); 

И возможно добавление .ToList(), как предлагал Хайтам.

+0

спасибо, я проголосовал –

2

linq/лямбда-выражения не распознают функцию GetUserName, , вы должны прочитать ее в отдельной переменной и использовать эту переменную в выражении linq query/lambda.

var username = User.Identity.GetUserName(); 
ViewBag.UserName = new SelectList(db.Users.Where(g => g.UserName == username), "UserName", "UserName"); 
+0

спасибо, я проголосовал –

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