这是子查询代码的代码。
var lis =
from t in de.TimeSheetUserStatus
where t.Leader_User_Id == Convert.ToInt32(
(from m in de.User_Details
where m.Name.Contains(Session["user"].ToString())
select new { m.User_Id }).FirstOrDefault())
select t;
grdTimeSheet.DataSource = lis.ToList();
grdTimeSheet.DataBind();
解释
我有TimeSheetUserStatus
视图,我正在将Leader_User_Id
与从User_Details
表中获取数据的子查询进行比较。编码时没有错误,但是当我执行此代码时,我收到运行时错误,如下所示。
答案 0 :(得分:4)
Linq
不知道如何将方法Convert.Toint32()
转换为Sql
查询。
您需要将代码重构为以下内容:
var userId = de.User_Details
.Where(m => m.Name.Contains(Session["user"].ToString()))
.Select(m => new{ m.User_Id })
.FirstOrDefault();
var lis = Enumerable.Empty<TimeSheetUserStatus>();
if(userId != null)
{
lis = de.TimeSheetUserStatus
.Where(t => t.Leader_User_Id == userId.User_Id);
}
grdTimeSheet.DataSource = lis.ToList();
grdTimeSheet.DataBind();
答案 1 :(得分:0)
试试这个
var lis = from t in TimeSheetUserStatus
where t.Leader_User_Id == Convert.ToInt32(
(from m in User_Details
where m.Name.Contains(uName)
select m.User_Id )
.FirstOrDefault())
select t;
而不是这个
select new { m.User_Id })
使用
select m.User_Id