Linq Sub Query无效

时间:2013-12-23 08:55:30

标签: c# .net linq

这是子查询代码的代码。

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表中获取数据的子查询进行比较。编码时没有错误,但是当我执行此代码时,我收到运行时错误,如下所示。

enter image description here

2 个答案:

答案 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