2014-02-15 29 views
0

我試圖使用signerID的值作爲另一個查詢中的where子句的一部分,但得到紅色下劃線並顯示錯誤:「委託不帶1個參數」。基本上我想在查詢allDepartments的where子句中使用signerID查詢(value = 15)的值。這裏是代碼:獲取查詢的值作爲另一個查詢的一部分

using (dbPSREntities10 myEntities = new dbPSREntities10()) 
     { 
      int theStatus = Convert.ToInt32(ddlChangeStatus.SelectedValue); 
      string userName = HttpContext.Current.User.Identity.Name; 

      var signerID = (from refAuthSigner in myEntities.refAuthSigners.Where(x => x.NetworkUsername == userName) 
          select new 
            { 
             refAuthSignerID = refAuthSigner.refAuthSignerID 
            }); <---- here I should have the value 15 

      var allDepartments = (from tbProject in myEntities.tbProjects.Where(x => x.refAuthSignerID == signerID)<-- and I want to use the value of signerID (15) here 

這是關閉了嗎?我可以硬編碼15代替signerID在哪裏clasue和一切正常。提前致謝!

回答

1

我建議你加入表上歌手ID:

var allDepartments = 
    from p in myEntities.tbProjects 
    join s in myEntities.refAuthSigners 
     on p.refAuthSignerID equals s.refAuthSignerID 
    where s.NetworkUsername == userName 
    select p; 

這個查詢將僅選擇有歌手ID等於與提供的名稱歌手的ID的項目。


當然,你可以做所有在兩個查詢 - 通過第一個查詢得到的ID,並在第二個查詢使用ID:

int singerId = myEntities.refAuthSigners 
         .Where(s => s.NetworkUsername == userName) 
         .Select(s => s.refAuthSignerID) 
         .FirstOrDefault(); // execute first query 

if (singerId == 0) 
    return; // singer not found 

// build second query 
var allDepartments = myEntities.tbProjects 
           .Where(p => p.refAuthSignerID == signerID); 
+0

這是LINQ to SQL的?我是否將linq用於實體?無論我的語法被稱爲什麼對我來說都沒有意義,而且你對SQL很瞭解。你有推薦嗎? – user1431633

+0

底部的代碼是完美的。謝謝!儘管我的變量是「signerId」而不是「singerId」;)但很難看出其中的差異。 – user1431633

+0

@ user1431633連接更好,因爲它需要單個數據庫查詢 –

相關問題