2016-10-13 6 views
0

У меня есть простой класс:Сравнить свойство объекта/доступа динамически со ссылкой строки

class Event { 
    public string Source { get; set; } 
} 

Тогда у меня есть список этого класса:

var list = new List<Event>(); 
     list.Add(new Event { Source="Me" }); 
     list.Add(new Event { Source="You" }); 

Теперь я хочу, чтобы получить один событие в список с свойством «Источник», установленным на «Я».

НО я не хочу, чтобы получить доступ к этому свойству, как этот список [0] .Source как это:

list.Where(o => o.Source == "Me").Single() 

Я знаю, что мой объект имеет свойство «Источник». но мне нужно передать строку, чтобы получить это свойство и сравнить его. Что-то вроде этого:

list.Where(o => o.GetType().GetProperty("Source").GetType() == "Me").Single() 

Видимо, это не работает. В основном я должен иметь возможность написать сравнение, например o.Source == "ME", без ссылки на свойство напрямую.

Как я могу это сделать?

+0

Вы можете попробовать библиотеку Dynamic LINQ Microsoft, https://msdn.microsoft.com/en-us/vstudio/bb894665.aspx после загрузки идти к LinqSamples/DynamicQuery в zip-файле, вот хорошая запись в блоге об этом. https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library – dman2306

+2

why'. GetType() == "Me" '? Должны ли вы получить значение и сравнить? –

ответ

4

Вам нужно использовать метод GetValue вместо

list.Where(o => o.GetType().GetProperty("Source").GetValue(o, null) == "Me").Single()