Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自多个Foreach的Linq_C#_Linq - Fatal编程技术网

C# 来自多个Foreach的Linq

C# 来自多个Foreach的Linq,c#,linq,C#,Linq,如何将以下多重foreach转换为LINQ foreach (var resourceOne in resourceList) { string s = (string)resourceOne; foreach (Control c in gridBtn.Children) { if (c.GetType() == typeof(ToggleButton)) {

如何将以下多重
foreach
转换为LINQ

    foreach (var resourceOne in resourceList)
    {
        string s = (string)resourceOne;
        foreach (Control c in gridBtn.Children)
        {
            if (c.GetType() == typeof(ToggleButton))
            {
                int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
                string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
                if (PaddedResult == s)
                {
                    ((ToggleButton)c).BorderBrush = Brushes.Red;
                    ((ToggleButton)c).BorderThickness = new Thickness(3, 3, 3, 3);
                }
            }
        }
    } 

实际上,您不能这样做,但是您可以简单地使用
Where
of type

foreach (var in gridBtn.Children.OfType<ToggleButton>)
{
    int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
    string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
    foreach (var resourceOne in resourceList.Where(x => x == PaddedResult))
    {
        c.BorderBrush = Brushes.Red;
        c.BorderThickness = new Thickness(3, 3, 3, 3);
    }
}
foreach(gridBtn.Children.OfType中的变量)
{
int-TagPlusOne=Convert.ToInt32(c.Tag)+1;
字符串PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
foreach(resourceList.Where中的var resourceOne(x=>x==PaddedResult))
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
}
}

免责声明:完全未经测试。

您不能真的这样做,但是您可以简单地使用
Where
类型

foreach (var in gridBtn.Children.OfType<ToggleButton>)
{
    int TagPlusOne = Convert.ToInt32(c.Tag) + 1;
    string PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
    foreach (var resourceOne in resourceList.Where(x => x == PaddedResult))
    {
        c.BorderBrush = Brushes.Red;
        c.BorderThickness = new Thickness(3, 3, 3, 3);
    }
}
IEnumerable<ToggleButton> query =
  from c in gridBtn.Children
  where c.GetType() == typeof(ToggleButton)
  let tagPlusOne = Convert.ToInt32(c.Tag) + 1
  let paddedResult = tagPlusOne.ToString().PadLeft(3, '0')
  join s in resourceList.Cast<string>() on paddedResult equals s
  select c;


foreach(ToggleButton button in query)
{
  button.BorderBrush = Brushes.Red;
  button.BorderThickness = new Thickness(3, 3, 3, 3);
}
foreach(gridBtn.Children.OfType中的变量)
{
int-TagPlusOne=Convert.ToInt32(c.Tag)+1;
字符串PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
foreach(resourceList.Where中的var resourceOne(x=>x==PaddedResult))
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
}
}
免责声明:完全未经测试。

IEnumerable查询=
IEnumerable<ToggleButton> query =
  from c in gridBtn.Children
  where c.GetType() == typeof(ToggleButton)
  let tagPlusOne = Convert.ToInt32(c.Tag) + 1
  let paddedResult = tagPlusOne.ToString().PadLeft(3, '0')
  join s in resourceList.Cast<string>() on paddedResult equals s
  select c;


foreach(ToggleButton button in query)
{
  button.BorderBrush = Brushes.Red;
  button.BorderThickness = new Thickness(3, 3, 3, 3);
}
从gridBtn.Children中的c开始 其中c.GetType()==typeof(ToggleButton) 让tagPlusOne=Convert.ToInt32(c.Tag)+1 让paddedResult=tagPlusOne.ToString().PadLeft(3,'0') 在paddedResult等于s的resourceList.Cast()中加入s 选择c; foreach(查询中的ToggleButton按钮) { button.BorderBrush=画笔.Red; button.BorderThickness=新厚度(3,3,3,3); }
IEnumerable查询=
从gridBtn.Children中的c开始
其中c.GetType()==typeof(ToggleButton)
让tagPlusOne=Convert.ToInt32(c.Tag)+1
让paddedResult=tagPlusOne.ToString().PadLeft(3,'0')
在paddedResult等于s的resourceList.Cast()中加入s
选择c;
foreach(查询中的ToggleButton按钮)
{
button.BorderBrush=画笔.Red;
button.BorderThickness=新厚度(3,3,3,3);
}

您可以这样做(但我无法测试它,因为我没有您的环境):


您可以这样做(但我无法测试,因为我没有您的环境):


最后,您将需要一个
foreach
或类似工具来设置按钮上的属性,因为LINQ用于查询数据(通常无副作用),而不是对它们进行变异。但是,可以使用LINQ简化查找要编辑的按钮的过程。e、 g.您的代码可以归结为:

var targetButtons = gridBtn
    .Children
    .OfType<ToggleButton>()
    .Where(tb => resourceList.OfType<string>().Contains($"{Convert.ToInt32(tb.Tag) + 1}:D3"));

foreach(var btn in targetButtons)
{
    btn.BorderBrush = Brushes.Red;
    btn.BorderThickness = new Thickness(3, 3, 3, 3);
}
var targetButtons=gridBtn
儿童
第()类
其中(tb=>resourceList.OfType()包含($“{Convert.ToInt32(tb.Tag)+1}:D3”);
foreach(目标按钮中的var btn)
{
btn.BorderBrush=画笔.红色;
btn.BorderThickness=新厚度(3,3,3,3);
}

可以进一步调整/优化/重构。注意,我已经用标准的D3数字格式字符串替换了
PadLeft(3,'0')
,其作用与此相同。

最后,您需要一个
foreach
或类似工具来设置按钮上的属性,因为LINQ用于查询数据(通常无副作用),而不是对它们进行变异。但是,可以使用LINQ简化查找要编辑的按钮的过程。e、 g.您的代码可以归结为:

var targetButtons = gridBtn
    .Children
    .OfType<ToggleButton>()
    .Where(tb => resourceList.OfType<string>().Contains($"{Convert.ToInt32(tb.Tag) + 1}:D3"));

foreach(var btn in targetButtons)
{
    btn.BorderBrush = Brushes.Red;
    btn.BorderThickness = new Thickness(3, 3, 3, 3);
}
var targetButtons=gridBtn
儿童
第()类
其中(tb=>resourceList.OfType()包含($“{Convert.ToInt32(tb.Tag)+1}:D3”);
foreach(目标按钮中的var btn)
{
btn.BorderBrush=画笔.红色;
btn.BorderThickness=新厚度(3,3,3,3);
}

可以进一步调整/优化/重构。注:我已将
PadLeft(3,'0')
替换为
D3
标准数字格式字符串,该字符串具有相同的功能。

您可以使用此代码。我为按钮和WinForm测试了这样的代码。 我希望代码对您有所帮助

resourceList.Where(resourceOne =>
        {
            string s = (string)resourceOne;
            gridBtn.Children.OfType<ToggleButton>().Where(c =>
            {
                var TagPlusOne = Convert.ToInt32(c.Tag) + 1;
                var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
                return PaddedResult == s;
            }).ToList().ForEach(c =>
            {
                c.BorderBrush = Brushes.Red;
                c.BorderThickness = new Thickness(3, 3, 3, 3);
            });
            return true;
        });
resourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
gridBtn.Children.OfType()。其中(c=>
{
var TagPlusOne=转换为32(c.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).ToList().ForEach(c=>
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
});
返回true;
});
我想你也可以用Select代替Foreach

esourceList.Where(resourceOne =>
        {
            string s = (string)resourceOne;
            var enumerable = ActiveForm.Controls.OfType<Button>().Where(control =>
            {
                var TagPlusOne = Convert.ToInt32(control.Tag) + 1;
                var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
                return PaddedResult == s;
            }).Select(control =>
            {
                control.BackColor = Color.Aqua;
                control.Cursor = Cursors.WaitCursor;
                return control;
            });
            return true;
        });
esourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
var enumerable=ActiveForm.Controls.OfType()。其中(control=>
{
var TagPlusOne=Convert.ToInt32(control.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).选择(控件=>
{
control.BackColor=Color.Aqua;
control.Cursor=Cursors.WaitCursor;
返回控制;
});
返回true;
});

您可以使用此代码。我为按钮和WinForm测试了这样的代码。 我希望代码对您有所帮助

resourceList.Where(resourceOne =>
        {
            string s = (string)resourceOne;
            gridBtn.Children.OfType<ToggleButton>().Where(c =>
            {
                var TagPlusOne = Convert.ToInt32(c.Tag) + 1;
                var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
                return PaddedResult == s;
            }).ToList().ForEach(c =>
            {
                c.BorderBrush = Brushes.Red;
                c.BorderThickness = new Thickness(3, 3, 3, 3);
            });
            return true;
        });
resourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
gridBtn.Children.OfType()。其中(c=>
{
var TagPlusOne=转换为32(c.Tag)+1;
var PaddedResult=TagPlusOne.ToString().PadLeft(3,'0');
返回PaddedResult==s;
}).ToList().ForEach(c=>
{
c、 BorderBrush=画笔。红色;
c、 边界厚度=新厚度(3,3,3,3);
});
返回true;
});
我想你也可以用Select代替Foreach

esourceList.Where(resourceOne =>
        {
            string s = (string)resourceOne;
            var enumerable = ActiveForm.Controls.OfType<Button>().Where(control =>
            {
                var TagPlusOne = Convert.ToInt32(control.Tag) + 1;
                var PaddedResult = TagPlusOne.ToString().PadLeft(3, '0');
                return PaddedResult == s;
            }).Select(control =>
            {
                control.BackColor = Color.Aqua;
                control.Cursor = Cursors.WaitCursor;
                return control;
            });
            return true;
        });
esourceList.Where(resourceOne=>
{
字符串s=(字符串)resourceOne;
var enumerable=ActiveForm.Controls.OfType()。其中(control=>
{
var TagPlusOne=C