簡體   English   中英

沒有值的C#固定Foreach循環

[英]C# FIxing Foreach loop with no values

我正在嘗試執行以下代碼,將數據庫中充滿游戲ID的兩列進行匹配,然后執行三個單獨的查詢以提取匹配的游戲ID的相關信息,並將它們很好地打包在電子郵件中。

foreach (var TempId in ResultGameIDCompare)

var command1 = "EXEC DB query";
var command2 = "EXEC DB query";
var command3 = "EXEC DB query";

var GameInfo = db2.Query(command1, (string)TempId.Game_ID);
var SystemInfo = db2.Query(command2, (string)TempId.Game_ID); 
var EditionInfo = db2.Query(command3, (string)TempId.Game_ID);  

foreach (var result in GameInfo) 
      {

        foreach (var result2 in SystemInfo) 
         {

           foreach (var result3 in EditionInfo) 
             {

                var text = " <ul>"+
                             "<p>My game information is as follows:" +@result.Name+"</p>"+
                             " <strong>System:</strong> "   @result2.System+
                             " <strong>Price:</strong> "  +@result3.Price+
                             " <strong>Edition:</strong> "  +@result3.Edition+
                             "<ul>";

                 WebMail.Send("Test@test.com",
                   "This is a test", 
                   body : text, 
                   isBodyHtml:true );  
               }  
           }
       }  

該代碼有效,但是如果我的查詢之一返回空行,則該game id將沒有任何內容饋入集合,並且可以理解的是,該game id不會生成電子郵件。

所以我試圖重新編寫我的代碼,以便即使SystemInfoEditionInfo查詢返回空行( GameInfo永遠不會返回空行)也仍然會生成電子郵件,但是我很難弄清楚去解決這個問題。 我試圖修改我的代碼,如下所示:

var Blank = " ";
foreach (var TempId in ResultGameIDCompare)

var command1 = "EXEC DB query";
var command2 = "EXEC DB query";
var command3 = "EXEC DB query";

var GameInfo = db2.Query(command1, (string)TempId.Game_ID);
var SystemInfo = db2.Query(command2, (string)TempId.Game_ID); 
var EditionInfo = db2.Query(command3, (string)TempId.Game_ID);  

foreach (var result in GameInfo) 
      {

        foreach (var result2 in SystemInfo.DefaultIfEmpty(Blank)) 
         {

           foreach (var result3 in EditionInfo.DefaultIfEmpty(Blank)) 
             {

                var text = " <ul>"+
                             "<p>My game information is as follows:" +@result.Name+"</p>"+
                             " <strong>System:</strong> "   @result2.System+
                             " <strong>Price:</strong> "  +@result3.Price+
                             " <strong>Edition:</strong> "  +@result3.Edition+
                             "<ul>";

                 WebMail.Send("Test@test.com",
                   "This is a test", 
                   body : text, 
                   isBodyHtml:true );  
               }  
           }
       }    

但是它返回錯誤"string' does not contain a definition for 'System'" ,老實說,我不確定這種更改是否會實現我認為會做的事情。 在沒有從查詢返回數據的位置返回“”。

foreach (var result in GameInfo)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<ul>");
    sb.AppendFormat("<p>My game information is as follows: {0}</p>", @result.Name);

    foreach (var result2 in SystemInfo)
    {
        sb.AppendFormat("<strong>System: {0}</strong>", @result2.System);

        foreach (var result3 in EditionInfo)
        {
            sb.AppendFormat("<strong>Price: {0}</strong>", @result3.Price);
            sb.AppendFormat("<strong>Edition: {0}</strong>", @result3.Edtion);
        }
    }

    sb.Append("</ul>");
    WebMail.Send("Test@test.com",
      "This is a test",
      body: sb.ToString(),
      isBodyHtml: true);  
}

只需將字符串的創建移到第一個循環外,然后在內部循環中將其添加到字符串中即可獲得更多數據。 StringBuilder是在一個高性能的字符串連接系統System.Text命名空間,並避免昂貴+級聯。

您的變量Blank必須是與原始集合相同類型的IEnumerable

如果您的SystemInfo是字符串的集合,

SystemInfo.DefaultIfEmpty(new[]{ Blank })

會做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM