C# 用于运行时列投影的动态LINQ

C# 用于运行时列投影的动态LINQ,c#,linq,C#,Linq,我正在尝试为所选列实现动态LINQ查询,以显示LINQ查询中的输出列。 以下是错误: /未为类型定义属性“System.String CompanyCode” “System.String” 有人能帮我解决上述错误吗?如果我们看一下以下代码: // I chnaged this part: string[] props = new string[] { "AccountingDocumentNbr", "CompanyCode",

我正在尝试为所选列实现动态LINQ查询,以显示LINQ查询中的输出列。 以下是错误:

/未为类型定义属性“System.String CompanyCode” “System.String”


有人能帮我解决上述错误吗?

如果我们看一下以下代码:

   // I chnaged this part:

   string[] props = new string[]
   {
        "AccountingDocumentNbr",
        "CompanyCode",
        "FiscalYearNbr"
   };


    Expression expr;
    Type type = entity.ElementType;

    foreach (string prop in props)
    {
        PropertyInfo pi = type.GetProperty(prop);

        expr = Expression.Property(expr, pi);

        type = pi.PropertyType;   // This line may cause your loop 
                                  // to do something you dont want to do?
    }
在我看来,你的循环遍历属性,得到一个字符串,然后搜索一个名为CompanyCode的prop,这个类字符串显然没有

您的循环此时执行以下操作:

从类型获取名为AccountingDocumentNbr的属性

从属性AccountingDocumentNbr的返回类型获取名为CompanyCode的属性

从属性CompanyCode的返回类型获取名为FiscalYearNbr的属性类型


我毫不怀疑这就是您真正想要做的。

运行时的变量类型是什么?在您分配pi.PropertyType之前。在我看来,您获取属性类型的循环并没有完成您想要的操作。您好,我想添加字符串列名,它具有来自LINQ查询的投影列。我正在尝试从目标获取属性假设我用目标对象替换类型,即类型type=entity.ElementType;即使我试图注释掉type=pi.PropertyType;仍然会得到相同的错误..请注释掉for循环中的最后一个stmt,看看你是否能进一步了解它
   // I chnaged this part:

   string[] props = new string[]
   {
        "AccountingDocumentNbr",
        "CompanyCode",
        "FiscalYearNbr"
   };


    Expression expr;
    Type type = entity.ElementType;

    foreach (string prop in props)
    {
        PropertyInfo pi = type.GetProperty(prop);

        expr = Expression.Property(expr, pi);

        type = pi.PropertyType;   // This line may cause your loop 
                                  // to do something you dont want to do?
    }