2012-04-19 97 views
1

在下面的代碼中,我希望retrn n行,但它總是返回零行作爲我的初始設置爲零的記錄。理想情況下,它應該做一個UNION ALL並返回整數列表中的所有整數的記錄clearanceTotals {6,7,8,9,17} 任何想法如何去解決它?使用UNION foreach循環中的LINQ to SQL的

var tbl = (from a in db.Applicants 
    where a.Id == null 
    select new { a.Id, a.Firstname, a.Lastname }); 
    int thisTag; 
    foreach (int c in clearanceTotals) 
    { 
     switch (c) 
     { 
      case 6: 
       thisTag = 38; 
       break; 
      case 8: 
       thisTag = 39; 
       break; 
      case 17: 
       thisTag = 39; 
       break; 
      case 7: 
       thisTag = 42; 
       break; 
      case 9: 
       thisTag = 44; 
       break; 
     } 
     tbl = (from a in db.Applicants 
       join ad in db.ApplicantDeployments on a.Id equals ad.ApplicantId 
       join aa in db.ApplicantAttachments on a.Id equals aa.ApplicantId 
       where a.Nationality == 15 && a.DoNotUse == false && a.ClearanceStatus == c 
       && aa.Tag == thisTag 
       select new { a.Id, a.Firstname, a.Lastname }).Union(tbl); 
    } 
+0

嘗試添加'.ToList()'所以'。 Union'不會嘗試在數據庫端進行處理。 – mellamokb 2012-04-19 18:24:37

+0

不要添加ToList,因爲您可能想要在數據庫中執行聯合! – usr 2012-04-19 18:26:51

+0

我不能做ToList() – sarsha 2012-04-19 18:31:31

回答

0

OK,所以我得到這個工作,但它的附加代碼加額外的變量

var temp = (from a in db.Applicants 
where a.Id == null 
select a.Id).ToList(); 

int thisTag; 
foreach (int c in clearanceTotals) 
{ 
    switch (c) 
    { 
     case 6: 
      thisTag = 38; 
      break; 
     case 8: 
      thisTag = 39; 
      break; 
     case 17: 
      thisTag = 39; 
      break; 
     case 7: 
      thisTag = 42; 
      break; 
     case 9: 
      thisTag = 44; 
      break; 
    } 
    temp = temp.Union(from a in db.Applicants 
      join ad in db.ApplicantDeployments on a.Id equals ad.ApplicantId 
      join aa in db.ApplicantAttachments on a.Id equals aa.ApplicantId 
      where a.Nationality == 15 && a.DoNotUse == false && a.ClearanceStatus == c 
      && aa.Tag == thisTag 
      select a.Id).ToList(); 
} 
var tbl = (from a in db.Applicants 
         join ad in db.ApplicantDeployments on a.Id equals ad.ApplicantId 
         where temp.Contains(a.Id) 
         select new { a.Id, a.Firstname, a.Lastname }).Distinct(); 
1

我認爲問題是,你捕捉在查詢循環變量(c),因此執行查詢時,它僅使用C的最新值。嘗試複製C將循環內的變量:

foreach (int c in clearanceTotals) 
{ 
    int c2 = c; 
    ... 

     ... 
     where a.Nationality == 15 && a.DoNotUse == false && a.ClearanceStatus == c2 
     ... 
+0

不,這不會幫助...只要它移動到c的下一個值,tbl變量就會變爲零記錄。 – sarsha 2012-04-19 19:09:48

+0

嘗試類似的事情,我理解你的解釋,但本地變量修復不會爲我改變任何東西。 – 2012-07-24 09:19:29