2015-05-18 53 views
-3

我寫了一個LINQ查詢,但我在執行foreach循環中的where子句時遇到了一些問題。LINQ查詢錯誤 - foreach循環中的where子句

using (DataClasses1DataContext db = new DataClasses1DataContext(("ConnectionString"))) 
{ 
    Table<NOTIF_SCHED> NOTIF_SCHED_alias = db.GetTable<NOTIF_SCHED>(); 
    IQueryable<NOTIF_SCHED> notif_sched_data = from sched in NOTIF_SCHED_alias select sched; 

    foreach (var notif_sched_data_value in notif_sched_data) 
    { 
     string a = notif_sched_data_value.NOTIF_RPT_ID.ToString(); 

     Table<mainframe_replication> mainframe_replications_alias = db.GetTable<mainframe_replication>(); 
     IQueryable<mainframe_replication> mainframe_replications_data = 
      from mfrepl in mainframe_replications_alias 
      where (mfrepl.RPT_ID.Equals(a)) 
      select mfrepl; 

     foreach (var mainframe_replication_data_value in mainframe_replications_data) 
     { 
      Console.WriteLine("hi"); 
     } 
    } 
} 

我不能夠使用Where子句行:

IQueryable<mainframe_replication> mainframe_replications_data = 
    from mfrepl in mainframe_replications_alias 
    where (mfrepl.RPT_ID.Equals(a)) 
    select mfrepl;** 

能有人幫,並檢查語法是錯誤的。

+2

什麼是錯誤訊息? –

+3

請在編寫問題的格式時加倍努力。在編輯它之前,它真的很難閱讀。 –

+0

當我檢查生成的SQl時,它會出現:SELECT [t0]。[REPL_GUID],[t0]。[REPL_TYPE],[t0]。[RPT_ID] FROM [mainframe_replication] AS [t0] WHERE [ t0]。[RPT_ID] = @ p0。我認爲問題是:@ P0「。沒有錯誤信息,它只是沒有進入循環 – vish1990

回答

0

這應該做同樣的事情,運行速度非常快:

using (DataClasses1DataContext db = new DataClasses1DataContext(("ConnectionString"))) 
{ 
    var ids = db.NOTIF_SCHEDs.Select(x=>x.NOTIF_RPT_ID).ToArray(); 
    var repl = db.mainframe_replication 
     .Where(mfrepl=>ids.Contains(mfrepl.RPT_ID)); 

     foreach (var mainframe_replication_data_value in repl) 
     { 
      Console.WriteLine("hi"); 
     } 
    } 
} 

如果NOTIF_RPT_ID不是一個字符串,RPT_ID是,你可以這樣做:

using (DataClasses1DataContext db = new DataClasses1DataContext(("ConnectionString"))) 
{ 
    var ids = db.NOTIF_SCHEDs.Select(x=>x.NOTIF_RPT_ID.ToString()).ToArray(); 
    var repl = db.mainframe_replication 
     .Where(mfrepl=>ids.Contains(mfrepl.RPT_ID)); 

     foreach (var mainframe_replication_data_value in repl) 
     { 
      Console.WriteLine("hi"); 
     } 
    } 
} 
+0

先生,此代碼表示** var不存在於當前上下文**和*預期類型*(after = sign)中。是否需要添加屬性子爲var? – vish1990

+0

對不起,也許'as'是一個保留字,使用'ids'代替更新的答案。無論如何,可能比'a'好。 –

+0

再次感到煩惱,但現在** var ids = db.NOTIF_SCHEDs.Select(x => x.NOTIF_RPT_ID).ToArray(); **沒有提供任何data.Did我錯過了什麼?另外,DB。將選項設置爲* NOTIF_SCHED *而不是* NOTIF_SCHED *。是否會影響它? – vish1990