在整数属性表达式使用情况下进行iQueryable



,所以我有一个使用实体框架linq构造的查询。取决于搜索参数以及所搜索的参数的类型。

我创建了这样的函数:

public static IQueryable<T> WhereInt<T>(this IQueryable<T> query, string propertyName, string contains)
        {
            var parameter = Expression.Parameter(typeof(T), "type");
            var propertyExpression = Expression.Property(parameter, propertyName);
            MethodInfo method = typeof(string).GetMethod("First");
            var someValue = Expression.Constant(contains, typeof(string));
            var containsExpression = Expression.Call(propertyExpression, method, someValue);
            return query.Where(Expression.Lambda<Func<T, bool>>(containsExpression, parameter));
        }

这样:

WhereInt(DCs, searchfield, search);

searchfield可能是用户ID,用户名,整数或字符串,理想情况下我想做:

searchfield.value == search.toInt32()

一种功能。

我也想使DateTime类型也可以搜索。也许我会为此做一个WhereDateTime

我在 var containsExpression = Expression.Call(propertyExpression, method, someValue);

上遇到错误

这可以与字符串一起使用,但由于错误而失败:

Value cannot be null.
Parameter name: method

整数值没有.First()方法。我真的不知道为什么您认为这会帮助您生成像searchfield.value == search.toInt32()这样的表达式(在任何地方都不说First)。而是使用相等的表达式。

我认为您正在寻找更多的东西。

public static IQueryable<T> WhereInt<T>(IQueryable<T> query, string propertyName, string value)
{
    var parameter = Expression.Parameter(typeof(T), "type");
    var propertyExpression = Expression.Property(parameter, propertyName);
    var someValue = Expression.Constant(int.Parse(value), typeof(int));
    var containsExpression = Expression.Equal(propertyExpression, someValue);
    return query.Where(Expression.Lambda<Func<T, bool>>(containsExpression, parameter));
}

相关内容

最新更新