正如标题所说。我有一个带有ID的Job页面。我在会话中存储此ID,当我尝试访问公司配置文件时,我只测试表Job中是否有带有作业ID的会话变量然后我尝试选择用户ID然后使用此用户ID搜索在UserManager中,尝试使用一些数据填充页面。
公司简介代码:
public async Task<ActionResult> Details(string id)
{
String JobValID = Convert.ToString(Session["DetailsURL"]);
var UserJobID = context.Jobs.Where(x => x.ID.ToString() == JobValID).OrderByDescending(x => x.UserID).Select(x => x).ToString();
UserJobID = id; //This line is to see what value I got from LINQ and is still the Session value.
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByIdAsync(id);
return View(user);
}
View对于此Controller是默认的scaffolded View from controller。
就像这样我得到Session["DetailsURL"]
var currentID = Url.RequestContext.RouteData.Values["id"];
Session["DetailsURL"] = currentID;
我想这不是获取用户个人资料页面的标准方法。但我使用Job Page的ActionLink
进入公司简介。
此处ActionLink
从JobPage到公司资料:
@Html.ActionLink("About this company", "Details", "UserAdmin", new { id = Session["UserJobID"] }, null)
我的问题出在LINQ
语句中,当我尝试选择UserID时,它没有获得正确的值,当我在UserManager中搜索时,该值仍然是session
值。
Found the solution here 所以我是怎么做到的:
var UserJobId = (from c in context.Jobs
where c.ID == JobValID
select new { c.UserID }).Single();
var myVal = UserJobId.UserID;
id = myVal;
答案 0 :(得分:0)
自从我使用C#以来已经有一段时间了,但是您的LINQ语句似乎正在获取Job
个对象的列表并在列表上执行ToString
。如果Job
引用了与之关联的UserId
,则以下LINQ语句应该有效:
var userId = context.Jobs
.SingleOrDefault(x => x.ID.ToString() == jobId)
.?Select(j => j.<accessorToUserId>) // Not sure what your schema is
.?ToString()
注意?
。这只是在SingleOrDefault
返回null的情况下,则不会发生以下方法调用。如果出于某种原因,多个Job
使用jobId
,这是非常糟糕的做法,请将SingleOrDefault
替换为FirstOrDefault
。
此外,Select
应该用于从类型T
映射到类型U
。执行Select(x => x)
毫无意义,因为您只是在执行T -> T
。