【问题标题】:bool column in where clause - linq/c#where 子句中的布尔列 - linq/c#
【发布时间】:2009-08-12 22:37:02
【问题描述】:
 Expression<Func<Employee, bool>> employeeWhere = R => true;
 employeeWhere = R => R.PositionCode == "M";
 employeeWhere = R => R.IsActive; //want only ones which are true

以上内容会为我构建一个查询吗:

SELECT * FROM EMPLOYEE 
WHERE POSITIONCODE = "M" && IsActive = 1

这就是我要返回的东西

 var result = _db.Employees
              .Where(employeeWhere)
              .Select(p => new { p.EmployeeID, p.FName, p.MName, p.LName })
              .AsEnumerable()
              .ToDictionary(kvp => kvp.EmployeeID, kvp => kvp.FName + " " + kvp.MName + " " + kvp.LName);

        return new SelectList(result, "Key", "Value");

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    上面的代码不会构建您发布的 SQL 查询,如果那是您所要求的。

    除非我弄错了,否则你会覆盖employeeWhere 的值两次。我认为你需要:

    Expression<Func<Employee, bool>> employeeWhere = R => R.PositionCode == "M" && R.IsActive;
    

    如果你有输入参数(比如 bool myBoolParamdecimal myDecimalParam)到任何方法,你可以这样做:

    Expression<Func<Employee, bool>> employeeWhere =
        (R => R.PositionCode == "M" && R.IsActive && myBoolParam && R.Salary > myDecmialParam);
    

    【讨论】:

    • 我明白你的意思。求我问这个?如果我必须检查输入参数是否有值,我将如何动态构建 where 子句?
    • Expression> 是一种包含 Lambda 函数的类型,它只是常规代码。你可以把任何你想要的东西放在那里,只要它接受一个 Employee 作为参数并返回一个布尔值。我将在上面举一个例子。
    • 谢谢乔希。如果我必须这样做: 1.检查 PositionCode 是否已输入,如果 Y 则添加表达式 2.检查是否输入了工资值,如果 Y 则添加到表达式有没有办法根据条件继续追加,更像是字典。添加..即。 Expression.Add?
    • 我认为您在这里开始遇到第二个复杂的问题。 :) 请在另一个问题中更详细地发布此问题并将链接放在这里,如果您不介意,我会点击它:)
    • 乔希。将您的答案标记为一个并开始新问题
    【解决方案2】:

    我想你想要这样的东西:

    var query = from e in _db.Employees
                where e.PositionCode == "M" && e.IsActive
                select new { e.EmployeeID, 
                    Value = e.FName + " " + e.MName + " " + e.LName                 
                };
    
    return new SelectList(query.ToDictionary(x => x.EmployeeID, "Key", "Value");
    

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多