'Select'在 CSharpScript 中不起作用的定义.EvaluateAsync



我在让这些代码工作时遇到了问题。CSharpScript.EvaluateAsync似乎无法理解Linq"Select"命令,即使我认为我正在向ScriptOptions添加正确的引用。这里的目标是使用EvaluateAsync来运行基于字符串的Linq查询。感谢您提前提供的帮助。

List<Dog> dogs = new List<Dog>();
dogs.Add(new Dog()
{ Name = "spike", Breed = "Poodle" });
dogs.Add(new Dog()
{ Name = "george", Breed = "Spaniel" });
dogs.Add(new Dog()
{ Name = "sammy", Breed = "Weimaraner" });

Console.WriteLine("Analyzing List");
// Func to return max string length of Breed Property in list of Dogs
int maxlen = dogs.Select(d => d.Breed.Trim().Length).OrderByDescending(d1 => d1).First();

// Recreated Func using Microsoft.CodeAnalysis.CSharp.Scripting.
var myLambda = "d => d.Select(d => d.Breed.Trim().Length).OrderByDescending(d1 => d1).First()";
Assembly[] assemblies = {
typeof(Dog).Assembly,
System.Reflection.Assembly.Load("System.Collections"),
System.Reflection.Assembly.Load("System.Linq"),
System.Reflection.Assembly.GetExecutingAssembly()

};
ScriptOptions options = ScriptOptions.Default.AddReferences(
assemblies
);
Func<List<Dog>, int> Dexprssn = await CSharpScript.EvaluateAsync<Func<List<Dog>, int>>(myLambda, options);
/*
Error
Microsoft.CodeAnalysis.Scripting.CompilationErrorException
HResult=0x80131500
Message=(1,8): error CS1061: 'Dog' does not contain a definition for 'Select' and no accessible 
extension method 'Select' accepting a first argument of type 'Dog' could be found 
(are you missing a using directive or an assembly reference?)
*/

添加程序集作为引用是其中的一部分,但要添加任何"使用指令",则还应使用AddImports():

//..
ScriptOptions options = ScriptOptions.Default.AddReferences(assemblies);
options = options.AddImports("System.Linq");
//..

最新更新