Как выполнить итерацию дерева Entity Framework, чтобы найти конкретный элемент - PullRequest
0 голосов
/ 25 августа 2011

Я загрузил свой каталог продуктов, используя Entity Framework

Я хотел бы перебрать все элементы, чтобы найти конкретный элемент структура Категория -> [Подкатегория ->] Продукт -> параметры Подкатегория, продукт и опции являются EntityCollection их определенного типа Все типы являются производными от EntityObject

Допустим, я ищу вариант 12, но не знаю, в каком продукте он находится.

Как я могу перебрать все объекты, чтобы найти опцию 12? У меня есть это до сих пор. в моем EntityObject я знаю, что он еще не рекурсивен, но, в конце концов, когда я узнаю, какие свойства являются коллекциями, я могу подойти к нему неправильно ...

public T Find<T>(Type type, int id) where T : EntityObject
        {    
            //get all properties 
            PropertyInfo[] properties = this.GetType().GetProperties();
            // foreach property find the one
            foreach (PropertyInfo oPropertyInfo in properties)
            {
                // check for type
                if (oPropertyInfo.PropertyType == type)
                {
                    PersistentEntity o = oPropertyInfo.GetValue(this, null) as EntityObject;
                    if (o != null && o.Id == id)
                    {
                        return (T)o;
                    }                        
                }
                // if property has childs, is IEnumerable -> recursive
            }


            return (T)new EntityObject();
        }

1 Ответ

0 голосов
/ 25 августа 2011

Как насчет этого?

var query = 
from c in categories
from sc in c.SubCategories
from from p in sc.Products
from o in p.Options
where o.Id == 2
select c /* or p?? */;
...