我有一个列表,我有一个使用linq返回该列表中的一条记录,我想要做的是迭代返回的那条记录,所以我将返回的子列表转换为IEnumerable,但是我有一个foreach语句只发生一次,当我调试时,我明显看到IEnumerable有一个索引,但有几个属性,这就是我想要改变的值
示例:
编辑:
var mylist =MyList.Where(d=>d.Field).First();
foreach( var record in mylist)
{
foreach( var property in record)
{
property=value
}
property =value; //this only have to one property in the record
//bascailly I want to iterate over the nested list in the list
//essentially every index in the main list is a list itself and
//I am trying to iterate over that indexed list
}
现在我遇到一个编译问题,声明myList不包含GetEnumerator的公共定义,我不能简单地将列表转换为IEnumerable
编辑2 -
抱歉这令人困惑,它从来都不是一个清单。它是一个IQuerable对象是mylist的结果,我一直看着代码运行答案 0 :(得分:1)
你需要2个foreach,因为你有List<List<>>
不是吗?
foreach(var element in MyList)
{
foreach(var property in element)
{
//do your thing
}
}
但您只是在First
MyList
元素
答案 1 :(得分:0)
如果你只有一个项目,为什么需要“循环”呢?
var myItem = MyList.Where(d=>d.Field).First();
现在这只是一个项目,而不是IEnumerable
。
该项目是什么类型的?它只是一些属性的类吗?如果你想循环使用那些你需要使用反射。
答案 2 :(得分:0)
除非我误解这是你的场景列表嵌套在列表中。您正在使用某些条件在parten列表中选择一个项目,并希望在主列表中的该项目的所有子项目上设置属性。如果是这样,以下内容将映射您的方案
class B
{
public int x;
}
class A
{
public int b;
public List<B> lst = new List<B>();
}
static void Main(string[] args)
{
List<B> Sub = new List<B>() { new B { x = 2 }, new B { x = 3 } };
List<B> Sub2 = new List<B>() { new B { x = 4 }, new B { x = 6 } };
List<A> Main = new List<A>() { new A() {b =2, lst = Sub2 }, new A() {b=3 , lst = Sub } };
var newlst = Main.Where((x) => x.b == 2).First().lst.Select((y)=> {y.x = 5;return y;});
foreach (var item in newlst)
{
Console.WriteLine("A.lst(x).x = {0}", item.x);
}
}
答案 3 :(得分:0)
这是能够做到的:
var mylist =(MYOBJECT)(MyList.Where(d=>d.Field).SingleorDefault());
PropertyInfo[] myproperties = mylist.GetType().GetProperties();
foreach( var record in myproperties) {
if(record.Name==target) //target is the passed string
}