Динамическое linq для коллекции объектов - целевой объект не является ExpandoObject - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь динамически читать значения свойств на основе текстового именования этих свойств. Это просто работает для вложенных классов. Но если есть класс вложенной коллекции, я бы хотел иметь возможность выбирать элемент с помощью динамического linq. К сожалению, при чтении в коллекции возвращается

'Целевой объект не является ExpandoObject' (.FirstOrDefault).

Любая идея для редактирования или, возможно, другое решение?

Мой код (.net core 2.1):

string value = string.Empty;

var dataClassProperty = dataClass.GetType().GetProperty(dataClassPropertyName).GetValue(dataClass, null);
if (dataClassProperty is IEnumerable<object>)
{
    object nestedPropertyItem = (dataClassProperty as IEnumerable<object>)
                                .AsQueryable()
                                .FirstOrDefault(collectionDynamicLinq);

    if (nestedPropertyItem != null)
        value = nestedPropertyItem.GetType().GetProperty(nestedPropertyName).GetValue(nestedPropertyItem, null)?.ToString() ?? "";
}

1 Ответ

0 голосов
/ 12 января 2019

Если вы хотите использовать Dynamic Linq для классов объектов (базы данных), вы можете использовать System.Linq.Dynamic.Core .

С этим вы можете легко написать текст на основе linq, например

var query = db.Customers
    .Where("City == @0 and Orders.Count >= @1", "London", 10)
    .OrderBy("CompanyName")
    .Select("new(CompanyName as Name, Phone)");
...