如何去除字符串变量中的双引号,使其可用于C# Linq动态查询?
C# 动态LINQ字符串查询实现方案
完全可以实现该需求,但仅去除字符串内的双引号不足以让查询正常运行,原生LINQ的Where方法不直接接收字符串类型的筛选参数,你需要借助动态LINQ相关的能力完成该需求,具体实现步骤如下:
实现步骤
- 第一步:安装NuGet包
System.Linq.Dynamic.Core,该库提供了直接传入字符串作为查询条件的LINQ扩展方法 - 第二步:调整字符串查询条件的格式,你原有写法里的
x=>前缀在动态LINQ查询中不需要额外声明,仅保留条件部分即可,也可以将转义双引号替换为单引号简化写法
可运行示例代码
using System.Linq.Dynamic.Core; // 写法1:直接写条件,使用转义双引号匹配你原有的写法 var filter = "name == \"Ammar\" && age == 12"; // 写法2:使用单引号包裹字符串值,无需转义,可读性更高 // var filter = "name == 'Ammar' && age == 12"; // 直接传入筛选字符串即可完成查询 list = list.Where(filter).ToList();
如果你要保留原有带x=>前缀的字符串变量,只需要做简单的字符串裁剪即可使用:
var variable = "x=>x.name==\"Ammar\" && x.age==12"; // 去除多余的lambda前缀和参数前缀 var processedFilter = variable.Replace("x=>", "").Replace("x.", ""); list = list.Where(processedFilter).ToList();
其他说明
如果你不想引入第三方库,也可以手动将字符串表达式编译为Expression<Func<T, bool>>类型的表达式树,不过该方案实现复杂度较高,普通业务场景下更推荐直接使用成熟的动态LINQ库处理。
内容的提问来源于stack exchange,提问作者Ammar Amir
相关产品推荐
相关产品推荐

