我在使此代码正常工作时遇到问题。即使我认为我正在添加对 ScriptOptions 的正确引用,CSharpScript.EvaluateAsync 似乎也无法理解 Linq 'Select' 命令。这里的目标是使用 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?)
*/