子查询的where条件,该如何处理
子查询的where条件
比如我要查看一段时间内商品发货情况 并且根据发货次数排序
筛选条件除了时间范围外还有其他字段比如收货人或者司机信息,这些信息是计算发货次数的条件
我想在查询表达式中用子查询的方式计算发货次数,然后where过滤完后排序
但是计算发货次数的子查询除了where id=上一层的id外,还需要知道整个查询的where条件
所以按理这个子查询应在整个查询的where过滤阶段完成后使用整个查询的筛选条件才能写出来
虽然我想到可以用一个bool变量在每个传入参数判断非空后的代码块里加一句用拼接的方式记录整个查询的筛选条件,在where过滤完成后再去写这个子查询
但是我觉得不优雅 如果linq to sql或entities framework能够有属性可以得到查询表达式的where表达式 就免去我一步一步拼接条件表达式的麻烦了
或者我遇到这种需求就不该使用子查询的方式实现 你们说呢
------解决思路----------------------
可以用Expression<Func<实体类型>, bool>>作为参数传给where。
------解决思路----------------------
你想知道查询条件可以从表达式中获取:
Expression<Func<实体类型>, bool>> expr = p => p.id == 1;
string 表达式 = expr.ToString();
你就能看到完整的表达式了
------解决思路----------------------
条件是or的话,就用union
条件是and的话,连续调用where
或者这么写
linq = model => linq(model) && 第二个条件
------解决思路----------------------
var query = db.Where(model => linq(model) && 第二个条件)
比如我要查看一段时间内商品发货情况 并且根据发货次数排序
筛选条件除了时间范围外还有其他字段比如收货人或者司机信息,这些信息是计算发货次数的条件
我想在查询表达式中用子查询的方式计算发货次数,然后where过滤完后排序
但是计算发货次数的子查询除了where id=上一层的id外,还需要知道整个查询的where条件
所以按理这个子查询应在整个查询的where过滤阶段完成后使用整个查询的筛选条件才能写出来
虽然我想到可以用一个bool变量在每个传入参数判断非空后的代码块里加一句用拼接的方式记录整个查询的筛选条件,在where过滤完成后再去写这个子查询
但是我觉得不优雅 如果linq to sql或entities framework能够有属性可以得到查询表达式的where表达式 就免去我一步一步拼接条件表达式的麻烦了
或者我遇到这种需求就不该使用子查询的方式实现 你们说呢
------解决思路----------------------
可以用Expression<Func<实体类型>, bool>>作为参数传给where。
------解决思路----------------------
你想知道查询条件可以从表达式中获取:
Expression<Func<实体类型>, bool>> expr = p => p.id == 1;
string 表达式 = expr.ToString();
你就能看到完整的表达式了
------解决思路----------------------
条件是or的话,就用union
条件是and的话,连续调用where
或者这么写
linq = model => linq(model) && 第二个条件
------解决思路----------------------
var query = db.Where(model => linq(model) && 第二个条件)