gpt4 book ai didi

c# - 在 C# 中,如何将空检查添加到动态快速代码中

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:20 28 4
gpt4 key购买 nike

我正在利用 this project to use jqgrid to filter and sort collections .我看到的一个问题是,当循环遍历集合并检查字符串字段的属性是否为 null 时,下面的代码将崩溃。我想调整下面的代码,以便它创建一个 lambda,它不仅执行“ToString()”和“包含”,而且还支持属性是否为 null(并将其视为 string.empty)

下面这个函数基本上有 2 个输入:

  1. 字段名
  2. 数据值(value)

下面的代码动态地构建一个表达式来循环遍历一个集合,并根据映射到传入的 FieldName 的属性检查“包含”。

我有这样的代码:

        ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");

MemberExpression memberAccess = null;
MethodCallExpression memberAccessToString = null;
foreach (var property in column.Split('.'))
{
memberAccess = MemberExpression.Property(memberAccess ?? (parameter as Expression), property);
memberAccessToString = MemberExpression.Call(memberAccess, "ToString", new Type[] {}, new Expression[] {});
}

Expression condition = null;
LambdaExpression lambda = null;
case WhereOperation.Contains:
condition = Expression.Call(memberAccessToString,
typeof(string).GetMethod("Contains"),
Expression.Constant(value));
lambda = Expression.Lambda(condition, parameter);

MethodCallExpression result = Expression.Call(
typeof(Queryable), "Where",
new[] { query.ElementType },
query.Expression,
lambda);

return query.Provider.CreateQuery<T>(result);

最佳答案

您是否检查过 Expression.Coalesce 您可以在调用 ToString() 之前将其应用于 memberAccess

memberAccess = MemberExpression.Property(memberAccess ?? (parameter as Expression), property);
memberAccessToString = MemberExpression.Call(Expression.Coalesce(memberAccess,Expression.Constant(string.Empty)), "ToString", new Type new Type[] {}, new Expression[] {});

没有测试,但可能会导致解决方案

关于c# - 在 C# 中,如何将空检查添加到动态快速代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608521/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com