2016-11-21 46 views
1

這是在動作控制器的選擇列表,MVC 5 asp.net選擇列表的使用WHERE條件

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> 

和它不工作埃羅:

LINQ實體無法識別方法 'System.String GetUserName(System.Security.Principal.IIdentity)' 方法,和這個 方法不能被翻譯成商店表達式。

+2

您不能在任何Linq表達式中使用函數調用'User.Identity.GetUserName()'。你可以做的是首先獲得'User.Identity.GetUserName()'的值到一個變量中,然後在你的LINQ表達式中使用該變量 –

回答

1

更改第一行:

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

您必須添加WhereToList()以執行查詢並返回結果。

+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"); 

也許可以像Haitham添加.ToList()建議。

+0

謝謝,我投了 –

2

linq/lambda表達式不能識別GetUserName函數, 您必須在單獨的變量中讀取它,並在linq query/lambda表達式中使用該變量。

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

謝謝,我投了票 –