2012-04-19 3 views
1

以下のコードでは、n行をretrnすることを想定していますが、初期セットのレコードがゼロであるため、理想的には、UNION ALLを実行して整数リスト内のすべての整数のレコードを返す必要があります.Totals {6,7,8,9,17} どうすればいいですか?linqからsqlへのforeachループ内での共用体の使用

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()' 'ように追加しました。連合はデータベース側で処理しようとしません。 – mellamokb

+0

ToListを追加しないでください。おそらくデータベース内で共用体を実行したいからです。 – usr

+0

できませんToList() – sarsha

答えて

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

+0

同様のことを試してみると、私はあなたの説明を理解していますが、ローカル変数の修正は私のために何も変わりません。 –

関連する問題