【问题标题】:What is the correct syntax for projection of a child property in a System.Linq.Dynamic.Core Select在 System.Linq.Dynamic.Core Select 中投影子属性的正确语法是什么
【发布时间】:2023-02-13 16:09:03
【问题描述】:

通过 Entity Framework 查询 SQL Server 时,我正在使用 System.Linq.Dynamic.Core v 1.2.24 创建动态选择语句。它位于 GraphQL API 后面,目的是使数据库查询尽可能高效——只查询数据库中请求的列。 我的投影适用于被枚举的类型,但该类型有一个子属性也需要投影。

我创建了一个简单的 Fiddle 来演示这一点。

https://dotnetfiddle.net/nvU7DB

在示例中,我正在查询一个 Person 集合,Person 有一个属性 Address。我成功地投影了 Person 属性,但不知道如何投影 Address 属性。我找不到这方面的任何例子。

这个动态 linq 字符串将带回地址的所有属性: “新人(身份证,名字,地址)" 但我想对 Address 进行投影,例如仅填充 Id 和 City。

我在想字符串可能看起来像这样 “新人(身份证,名字,新地址(ID,城市)“ 但这会导致“未处理的异常。未找到键入‘地址’(在索引 37 处)”

没有“新”: “新人(身份证,名字,地址(ID,城市))" 这会导致“未处理的异常。类型‘Person’(索引 38)中不存在属性或字段‘City’”。

为了阐明我正在尝试做的事情,这就是投影在 C# 代码中的样子:

    var projectedPeople = people.Select(
        e => new Person() {
            Id = e.Id,
            FirstName = e.FirstName,
            Address = new Address(){
                Id = e.Address.Id,
                City = e.Address.City
            }
        });

任何帮助或见解将不胜感激。

【问题讨论】:

    标签: system.linq.dynamic


    【解决方案1】:

    对于以后捡到这个的人,解决方案如下

    string dynamicSelect = "new Person(Id, FirstName, new Address(it.Address.Id, it.Address.AddressLine1, it.Address.City) as Address)";
    
    ParsingConfig parsingConfig = new ParsingConfig(){ResolveTypesBySimpleName = true};
    
    IEnumerable result = (IEnumerable)peopleQueryable.Select(parsingConfig, dynamicSelect);
    

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多