[英]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
不會生成電子郵件。
所以我試圖重新編寫我的代碼,以便即使SystemInfo
或EditionInfo
查詢返回空行( 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.