I am use microsoft.clearscript.v8 in asp .net core mvc, in the Linq Where condition is not work in my code,
this is my homecontroller.cs code

public IActionResult Index()
{
    using (var engine = new V8ScriptEngine())
    {
        string json = @"
        [
            { ""id"": 1, ""name"": ""John"", ""age"": 25 },
            { ""id"": 2, ""name"": ""Jane"", ""age"": 30 }      
        ]";

        // Parse JSON as JArray
        var jsonArray = JArray.Parse(json);

        // Use ClearScript to filter the data
        engine.Script.PersonList = jsonArray.ToObject<List<dynamic>>();
        engine.AddHostType(typeof(Enumerable));
        engine.AddHostType("Pred", typeof(Func<dynamic, bool>));

        engine.Execute(@"var result = PersonList.Where(new Pred(p => p.age > 25)).ToList();");

        // Retrieve the result from the script engine
        List<dynamic> filteredList = engine.Script.result;

        // Print filtered results
        foreach (var person in filteredList)
        {
            Console.WriteLine($"Id: {person.id}, Name: {person.name}, Age: {person.age}");
        }
    }
    return view();
}

我希望输出是使用LINQ WHERE条件的id : 2, name : Jane, age : 30.

推荐答案

p => p.age > 25中,p.age具有类型Newtonsoft.Json.Linq.JValue,使得比较未定义(因此不是true).

实际的JValue.ValueInt64(long),它支持Convert的转换.因此,您可以通过将值转换为int(或long,如果您愿意)来修复它:

添加:

engine.AddHostType(typeof(Convert));

并将脚本行更改为:

@"var result = PersonList.Where(new Pred(p => Convert.ToInt32(p.age) > 25)).ToList();"

Csharp相关问答推荐

C# uwp中的Win11启动屏幕剪辑工作方式不同

C#使用属性和值将JSON转换为XML

在Linq中调用需要limit和offset的方法''''

`Task`只有在C#中等待时才会运行吗?

实体框架核心上是否支持使用NPGSQL的字符串聚合?

限制特定REST API不被访问,但部署代码

MongoDB.NET-将数据绑定到模型类,但无法读取整数值

异步实体框架核心查询引发InvalidOperation异常

C#DateTime.ParseExact不使用特定日期

如何比较C#中的L和ł(波兰字符)返回TRUE

如何管理Azure认证客户端响应和证书 fingerprint

在C#.NET项目中启动时,如何等待提升的PowerShell进程退出?

如何在.NET Maui中将事件与MVVM一起使用?

Celler ArgumentExpression是否期望在所有情况下都捕获允许空值的运算符?

使用动态键从请求体反序列化JSON

EF Core:如何对关系属性进行建模?

为什么当我try 为玩家角色设置动画时,没有从文件夹中拉出正确的图像?

为什么我在使用有效令牌的情况下仍未获授权?

Xamarin.Forms中具有类似AspectFill的图像zoom 的水平滚动视图

Azure队列触发器未使用隔离的工作进程执行