【问题标题】:Dynamic linq for object collection - Target object is not an ExpandoObject对象集合的动态 linq - 目标对象不是 ExpandoObject
【发布时间】:2019-01-13 03:19:32
【问题描述】:

我尝试根据这些属性的文本命名动态读取属性值。这仅适用于嵌套类。 但是如果有一个嵌套的集合类,我希望能够使用动态 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() ?? "";
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 2012-03-24
      相关资源
      最近更新 更多