перебрать запись в общем списке - PullRequest
0 голосов
/ 19 октября 2011

У меня есть список, и он возвращает только одну запись из этого списка, используя 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

EDIT 2-

извините запутаница, это никогда не был список.Это был IQuerable объектов - это то, чем оказался mylist, я все время искал код, выполняемый

Ответы [ 4 ]

1 голос
/ 19 октября 2011

Вам нужно 2 foreach, потому что у вас есть List<List<>> не так ли?

foreach(var element in MyList)
{

    foreach(var property in element)
    {
       //do your thing
    }
}

Но вы выбирали только элемент First на MyList

0 голосов
/ 19 октября 2011

это удалось сделать:

 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
 } 
0 голосов
/ 19 октября 2011

Если я не понимаю, что это ваш сценарий, вложенный в список. Вы выбираете один элемент в списке компонентов, используя некоторые критерии, и хотите установить свойство для всех вложенных элементов этого элемента в основном списке. Если это так, то нижеприведенные карты отображают ваш сценарий

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);
        }



    }         
0 голосов
/ 19 октября 2011

Если у вас есть только один предмет, зачем вам его «зацикливать»?

var myItem = MyList.Where(d=>d.Field).First();

Теперь это просто предмет, а не IEnumerable.

Какой тип товара? Это просто какой-то класс со свойствами? Если вы хотите пройтись по ним, вам нужно использовать отражение.

...