相关疑难解决方法(0)

如何将LINQ表达式合并为一个?

我有一个包含多个字段的表单(公司名称,邮政编码等),允许用户搜索数据库中的公司.如果用户在多个字段中输入值,那么我需要搜索所有这些字段.我正在使用LINQ来查询数据库.

到目前为止,我已经设法编写了一个函数,它将查看它们的输入并将其转换为表达式列表.我现在想将该List转换为单个表达式,然后我可以通过LINQ提供程序执行该表达式.

我最初的尝试如下

private Expression<Func<Company, bool>> Combine(IList<Expression<Func<Company, bool>>> expressions)
    {
        if (expressions.Count == 0)
        {
            return null;
        }
        if (expressions.Count == 1)
        {
            return expressions[0];
        }
        Expression<Func<Company, bool>> combined = expressions[0];
        expressions.Skip(1).ToList().ForEach(expr => combined = Expression.And(combined, expr));
        return combined;
    }
Run Code Online (Sandbox Code Playgroud)

但是,这会失败,并出现"二进制运算符并且未定义..."的异常消息.有没有人有任何想法,我需要做什么来结合这些表达式?

编辑:更正了我忘记将结果和表达式一起分配给变量的行.谢谢你指出那些人.

linq

19
推荐指数
2
解决办法
1万
查看次数

如何在不转换C#中的Expression.Convert的情况下获取Nullable值(字段)的表达式?

我在形成动态查询表达式期间处理Nullable类型的scanario.这些表达式将从任何SQL表中获取过滤数据(使用EF与Code First类连接).

我有正常的对象(例如,托运操作几个属性以及Nullable属性).

我的表达形式很顺利,直到我遇到一些Nullable类型.在这些无用之处,我得到了

没有为类型'System.Nullable`1 [System.Single]'和'System.Single'定义二元运算符NotEqual.

为了删除此异常,我正在使用关于在不同线程上发布的转换的所有appraoches.

在Expression树中调用lambda表达式

尝试使用表达式树过滤Nullable类型

这些都是生成带有"Convert"字样的表达式(即Convert(someValue)),结果我总是有表达式

t=>(t.Consignment.Id = 45000 && t.Consignment.someProperty>=45 Or t.Consignment.Weight! = Convert(5000)).
Run Code Online (Sandbox Code Playgroud)

当然我需要整个上面的表达式没有"转换".因为这个"转换"不会相应地从表中获取数据.

任何帮助将不胜感激!还应该做什么?我已经知道转换,但是这使得整个表达式无用,因为它不会因为不必要的"转换"而投影记录

添加

   Expression NotEqual<T>(Expression PropertyType, ConstantExpression a_Constant, ParameterExpression parameter)
   {
    if(IsNullableType(Property.Type) &&!IsNullableType(a_Constant.Type))
    {
      var converted = a_Constant.Type != Property.Type ?  (Expression)Expression.Convert(a_Constant, Property.Type): (Expression)a_Constant;

     // here above statement returns (Convert(50000)) and all I want (50000), but i tried all combinitions from Expression in order to form this constant as expression, it always throws exception what I mentioned originally.

     var body = …
Run Code Online (Sandbox Code Playgroud)

c# lambda expression-trees linq-expressions

1
推荐指数
1
解决办法
3334
查看次数

标签 统计

c# ×1

expression-trees ×1

lambda ×1

linq ×1

linq-expressions ×1