2015-01-29 2 views
0

Простое описание моей проблемы: Скажем, у меня есть два класса, class1 и класса 2, что и реализовать тот же интерфейс, который имеет следующие поля:Используйте GetProperties() в LINQ Где раздел

строка FieldA;

строка FieldB;

По старым причинам Class1 использует FieldA для определенной цели, которая отличается от класса Class2. На самом деле Class2 использует FieldB для тех же данных, что Class1 будет использовать FieldA, и наоборот: поля включаются в классы.

Мне нужно указать, какое поле использовать в левой части предложения Where запроса LINQ до его передачи в Entity Framework. Если я использую отражение через GetProperties(), он просто передает Func в базу данных, прежде чем оценивать ее, и получаю исключение. Как я могу динамически решить, какое поле использовать? Если возможно, было бы полезно

+0

Украсьте свои поля специальным атрибутом. В момент выполнения выберите атрибуты из отражения * перед * исполнением и выясните, кто есть кто, и передайте правильное значение свойства в метод. Надеюсь это поможет! – code4life

ответ

1

Я предложил бы использовать что-то вроде этого:

var query = from obj in yourCollection 
    let left = obj is ClassA ? obj.Field1 : obj.Field2 
    where left == /* your condition goes here */ 
    select /* anything you want to select */; 

Вы также можете вызвать GetProperties() в пункте пусть, чтобы получить то, что вы хотите, если выше метод не достаточно.