错误CS1061不包含定义-Roslyn编译问题

时间:2018-07-11 15:43:15

标签: c# roslyn

我正在使用Roslyn在具有定义的业务对象(比如PEM)上生成Linq表达式

p12

要编译Customer的Roslyn代码是-

public class Customer  
{
    public List<Order> Orders { get; set; }
}

生成的Linq表达式如下。

C# code

该类还具有以下用途

var linqType = typeof(System.Linq.Enumerable);
List<MetadataReference> metadataReferences = new List<MetadataReference>()
{                  
      //Other business DLLs as well
      MetadataReference.CreateFromFile(linqType.Assembly.Location) 
};

//mscorlib
car dlls = AppContext.GetData("TRUSTED_PLATFORM_ASSEMBLIES").ToString().Split(new char[] { ';' });
foreach (var platformDLL in dlls)
{       
      metadataReferences.Add(MetadataReference.CreateFromFile(platformDLL));
}

// Removed: Get Units 

var compilationOptions = new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary,
                optimizationLevel: OptimizationLevel.Debug,
                assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default,
                allowUnsafe: true);
compilationOptions.WithUsings(GetNamespaces());

var compilation = CSharpCompilation.Create(assemblyName: "customer",
       syntaxTrees: units.Select(x => x.SyntaxTree).ToArray(),  
       references: metadataReferences,
       options: compilationOptions);

但是,我仍然遇到错误

Exists<Customer>(f => f.Orders.Any() == true)

可以正确生成代码,但是使用Roslyn的代码编译失败,并出现上述错误。当我在Visual Studio中复制粘贴生成的代码时,编译没有错误

1 个答案:

答案 0 :(得分:2)

听起来您创建了一个MemberAccessExpression,其成员名为Orders.Any()

MemberAccessExpression只能使用一个成员;您需要该链的两个嵌套表达式。