0

リフレクションを使用して汎用 HashSet から値を取得する方法が必要です。これが私が試したことです(これをコピーしてコンソールアプリに貼り付けることができます):

 class Program
    {
        public class Order
        {
            public int Id { get; set; }
        }

        public class Person
        {
            public string Name { get; set; }

            public ICollection<Order> Orders { get; set; }

        }

        static void Main(string[] args)
        {
            var person = new Person();
            person.Name = "Test Person";

            person.Orders = new HashSet<Order>();

            person.Orders.Add(new Order() { Id = 1 });
            person.Orders.Add(new Order() { Id = 2 });

            var reflectedOrders = person.GetType().GetProperty("Orders").GetValue(person, null);

            Console.WriteLine("How do I iterate the reflected orders?");

            Console.ReadLine();
        }
    }

編集

これは例です。実際のアプリケーションでは、反映された注文をどのタイプに変換するかわかりません。ICollection<T>プロパティが(EFによってHashShetに変換された)であることだけを知っています

4

3 に答える 3

2

にキャストreflectedOrdersしてみましたIEnumerableか?

IEnumerable reflectedOrders = (IEnumerable)person.GetType().GetProperty("Orders").GetValue(person, null);
于 2012-11-21T22:09:59.960 に答える
0

キャストとして簡単にする必要があります。

var reflectedOrders = (HashSet<Order>) person.GetType().GetProperty("Orders").GetValue(person, null);

foreach (var order in reflectedOrders)
    ...
于 2012-11-21T22:10:36.833 に答える
0

どうですか

var orders = persons.OfType<Person>().SelectMany(p => p.Orders);
于 2012-11-21T22:21:11.073 に答える