使用一个 Select 获取值并绑定到视图模型
Get Values With One Select and Bind To View Model
我正在使用 Web 服务获取活动目录用户并将其值绑定到视图模型。但是网络服务太慢了,所以每个查询都需要时间一个一个。我可以只通过一个查询获取值并将它们绑定到视图模型吗?
我的代码是这样的:
public ActionResult EditUser(string id)
{
AdVM model = new AdVM();
Security s = new Security();
s.Cn = "Users";
ADLogin a = new ADLogin();
model.Username = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=>x.UserName).FirstOrDefault();
model.DisplayName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.DisplayName).FirstOrDefault();
model.FirstName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.FirstName).FirstOrDefault();
model.LastName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.LastName).FirstOrDefault();
model.Title = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Title).FirstOrDefault();
model.Department = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Department).FirstOrDefault();
model.Division = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Division).FirstOrDefault();
return PartialView("_PartialEdit", model);
}
你应该试试这个:
AdVM model = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=> new AdVM() {Username = x.UserName, DisplayName = x.DisplayName... other fileds}).SingleOrDefult();
你可以试试这个
var user = a.ADGetAllUser(s).Where(x => x.UserName == id).FirstOrDefault();
只需删除 Select 语句。
一般来说打AD并不是最快的事情。我会将用户缓存到静态变量并经常刷新它。然后您可以只检索 GET 所需的个人用户。
或者,您可以按照 Florim 的建议将您的方法更改为 return 一次全部完成。您不需要方法中的 id 参数,并且很可能需要重新处理您的视图。
我正在使用 Web 服务获取活动目录用户并将其值绑定到视图模型。但是网络服务太慢了,所以每个查询都需要时间一个一个。我可以只通过一个查询获取值并将它们绑定到视图模型吗?
我的代码是这样的:
public ActionResult EditUser(string id)
{
AdVM model = new AdVM();
Security s = new Security();
s.Cn = "Users";
ADLogin a = new ADLogin();
model.Username = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=>x.UserName).FirstOrDefault();
model.DisplayName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.DisplayName).FirstOrDefault();
model.FirstName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.FirstName).FirstOrDefault();
model.LastName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.LastName).FirstOrDefault();
model.Title = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Title).FirstOrDefault();
model.Department = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Department).FirstOrDefault();
model.Division = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Division).FirstOrDefault();
return PartialView("_PartialEdit", model);
}
你应该试试这个:
AdVM model = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=> new AdVM() {Username = x.UserName, DisplayName = x.DisplayName... other fileds}).SingleOrDefult();
你可以试试这个
var user = a.ADGetAllUser(s).Where(x => x.UserName == id).FirstOrDefault();
只需删除 Select 语句。
一般来说打AD并不是最快的事情。我会将用户缓存到静态变量并经常刷新它。然后您可以只检索 GET 所需的个人用户。
或者,您可以按照 Florim 的建议将您的方法更改为 return 一次全部完成。您不需要方法中的 id 参数,并且很可能需要重新处理您的视图。