Govinda Rajbhar
Govinda Rajbhar

Reputation: 3034

Linq Sub Query is not working

This is my code for Sub Query Code.

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();

Explanation

I have TimeSheetUserStatus view and I am comparing Leader_User_Id with sub query which is fetching data from the User_Details table. There is no error at coding time but when I am executing this code then I am getting a runtime error as shown below.

enter image description here

Upvotes: 0

Views: 105

Answers (2)

Neeraj Kumar Gupta
Neeraj Kumar Gupta

Reputation: 2363

Try this

        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;

Intead of this

select new { m.User_Id })

use

 select  m.User_Id

Upvotes: 0

RePierre
RePierre

Reputation: 9566

Linq does not know how to convert method Convert.Toint32() into a Sql query.

You need to refactor your code to something like this:

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();

Upvotes: 4

Related Questions