2013-12-23 91 views
0

這是我的代碼爲子查詢碼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看法,我與從User_Details表中讀取數據的子查詢與Leader_User_Id。在編碼時沒有錯誤,但是當我執行此代碼時,我得到一個運行時錯誤,如下所示。

enter image description here

+0

不,但會話[「用戶」]有一個值「hitesh」我從其他頁面獲取值。 –

+2

您使用哪個版本的EF? – Zaki

+0

400 EF我正在使用。 –

回答

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

感謝哥們它正在工作。 –

0

試試這個

select new { m.User_Id }) 

利用這個

 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 m.User_Id