用于对象收集的动态linq-目标对象不是ExpandoObject

时间:2019-01-10 13:16:58

标签: c# reflection .net-core dynamic-linq .net-core-2.1

我尝试根据这些属性的文本命名来动态读取属性值。这仅适用于嵌套类。 但是,如果有一个嵌套的集合类,我希望能够使用动态linq选择一个项目。不幸的是,在阅读集合时,它返回

  

“目标对象不是ExpandoObject”(。FirstOrDefault)。

有任何编辑想法或其他解决方案吗?

我的代码(.net核心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 :(得分:0)

如果要在(数据库)实体类上使用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)");