C# 这里有一个棘手的问题-尝试通过一个循环,只返回与另一个循环相等的值
基本上我这里有个问题C# 这里有一个棘手的问题-尝试通过一个循环,只返回与另一个循环相等的值,c#,loops,if-statement,C#,Loops,If Statement,基本上我这里有个问题 我有一个循环,其中有一个网站列表,我要通过每个网站 我有另一个循环,它只包含一些站点 我只想返回属性t.title==F.title的站点 如果这是真的,我想勾选一个复选框 如果没有,则不要勾选复选框 问题是,它一直在创建比我想要的更多的复选框,我只想要那些勾选了匹配项的复选框——其余的不勾选 foreach (Admin.DTO.SiteMap t in sites) { for each (Admin.DTO
- 我有一个循环,其中有一个网站列表,我要通过每个网站李>
- 我有另一个循环,它只包含一些站点
- 我只想返回属性t.title==F.title的站点
- 如果这是真的,我想勾选一个复选框
- 如果没有,则不要勾选复选框
foreach (Admin.DTO.SiteMap t in sites)
{
for each (Admin.DTO.SmallSites f in smallsites){
if (t.Title == f.Title)
{
myString1.Append(" <input type='checkbox' checked='yes' value='" + t.Title + "'/> ");
myString1.Append(t.Title);
}
else {
myString1.Append(" <input type='checkbox' value='" + t.Title + "'/> ");
myString1.Append(t.Title);
}
}
}
foreach(站点中的Admin.DTO.SiteMap t)
{
对于每个(在SmallSites中的Admin.DTO.SmallSites f){
如果(t.Title==f.Title)
{
myString1.Append(“”);
myString1.Append(t.Title);
}
否则{
myString1.Append(“”);
myString1.Append(t.Title);
}
}
}
如果您不想显示未选中的框,请删除else子句。Calibre-您的逻辑存在上述缺陷
基本上,每次循环第二个循环时,都会重置每个复选框,因此在前一个循环中设置的内容可能会被取消设置(反之亦然)。如上所述,删除else部分(或在单独的语句中预先初始化值)
[编辑]-更新示例:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApplication2
{
internal class Site
{
public string Title { get; set; }
public string OtherStuff { get; set; }
// don't know your site sturcture but this might help
}
class Program
{
static void Main(string[] args)
{
var siteMap =
new List<Site>
{
new Site {OtherStuff = "bla1", Title = "Title 1"},
new Site {OtherStuff = "bla2", Title = "Title 2"},
new Site {OtherStuff = "bla3", Title = "Title 3"},
new Site {OtherStuff = "bla4", Title = "Title 4"},
new Site {OtherStuff = "bla5", Title = "Title 5"}
};
var smallSites =
new List<Site>
{
new Site {OtherStuff = "bla1", Title = "Title 1"},
new Site {OtherStuff = "bla2", Title = "Another title 2"},
new Site {OtherStuff = "bla3", Title = "Another title 3"},
new Site {OtherStuff = "bla4", Title = "Title 4"},
new Site {OtherStuff = "bla5", Title = "Another title 5"}
};
// group all the matching titles to be checkboxed
var query = (siteMap.Select(sm =>
new {
sm.Title,
SmallSites = smallSites.Where(ss => ss.Title == sm.Title)
}));
// get any items that don't match
IEnumerable<Site> query2 =
smallSites.Where(ss => !(siteMap.Select(sm => sm.Title))
.Contains(ss.Title));
string myString1 = "";
// this is our checkbox items, do those 1st
foreach (var item in query)
{
if (item.SmallSites.Any())
{
foreach (var smallSite in item.SmallSites)
{
myString1 += string.Format("<input type='checkbox' checked='yes' value='{0}'", smallSite.Title) + Environment.NewLine;
}
}
}
// now throw down our non-checked items
foreach (var smallSite in query2)
{
myString1 += string.Format("<input type='checkbox' value='{0}'", smallSite.Title) + Environment.NewLine;
}
Console.Write(myString1);
Console.Read();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
命名空间控制台应用程序2
{
内部类站点
{
公共字符串标题{get;set;}
公共字符串OtherStuff{get;set;}
//不知道你的网站结构,但这可能会有所帮助
}
班级计划
{
静态void Main(字符串[]参数)
{
var站点地图=
新名单
{
新站点{OtherStuff=“bla1”,Title=“Title 1”},
新站点{OtherStuff=“bla2”,Title=“Title 2”},
新站点{OtherStuff=“bla3”,Title=“Title 3”},
新站点{OtherStuff=“bla4”,Title=“Title 4”},
新站点{OtherStuff=“bla5”,Title=“Title 5”}
};
var小型站点=
新名单
{
新站点{OtherStuff=“bla1”,Title=“Title 1”},
新站点{OtherStuff=“bla2”,Title=“另一个Title 2”},
新站点{OtherStuff=“bla3”,Title=“另一个Title 3”},
新站点{OtherStuff=“bla4”,Title=“Title 4”},
新站点{OtherStuff=“bla5”,Title=“另一个Title 5”}
};
//将要选中的所有匹配标题分组
var query=(siteMap.Select(sm=>
新的{
sm.头衔,
SmallSites=SmallSites.Where(ss=>ss.Title==sm.Title)
}));
//获取任何不匹配的项目
IEnumerable查询2=
smallSites.Where(ss=>!(siteMap.Select(sm=>sm.Title))
.包含(ss.标题));
字符串myString1=“”;
//这是我们的复选框项目,先做这些
foreach(查询中的var项)
{
if(item.SmallSites.Any())
{
foreach(项目中的变量smallSite.SmallSites)
{
myString1+=string.Format(“这两个循环将创建sites*smallsites复选框。选中其中一个复选框后,许多复选框将不在其余复选框中被选中。
这是你需要的吗
foreach (Admin.DTO.SiteMap t in sites)
{
flg = false;
for each (Admin.DTO.SmallSites f in smallsites)
if (t.Title == f.Title) flg = true;
if (flg)
{
myString1.Append(" <input type='checkbox' checked='yes' value='" + t.Title + "'/> ");
myString1.Append(t.Title);
}
else {
myString1.Append(" <input type='checkbox' value='" + t.Title + "'/> ");
myString1.Append(t.Title);
}
}
foreach(站点中的Admin.DTO.SiteMap t)
{
flg=假;
对于每个(在SmallSites中的Admin.DTO.SmallSites f)
如果(t.Title==f.Title)flg=true;
如果(flg)
{
myString1.Append(“”);
myString1.Append(t.Title);
}
否则{
myString1.Append(“”);
myString1.Append(t.Title);
}
}
您的代码将打印出小型站点的内容
n次-其中n是站点
中的项目数。每次打印出小型站点
,它可能会选中其中一个框
我猜您希望保持外部循环不变,但只需检查站点是否包含在smallsites
中。pinichi的响应将产生正确的输出,但可能效率很低。如果不知道SiteMap
和smallsites
的结构,我无法提出更好的方法。Iant显示未选中框虽然我想同时显示选中框和未选中框,但这取决于if语句是否相等,我将如何预先初始化这些值?c-我已经用一个快速示例更新了我的答案,说明了如何解决这个问题