1

我正在使用 LINQ to SQL 查询数据,但我想在提交查询之前添加到表达式中。到目前为止,我有这个:

    public virtual IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null) where T : class
    {
        var table = GetTable<T>();
        return expression != null ? table.Where(expression).OrderBy("OrderBy") : table;
    }

如果我想更改表达式,或者添加另一个 Where 或 OrderBy,我可以在查询实际表之前这样做吗?像这样的东西:

    public virtual IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null) where T : class
    {
        var table = GetTable<T>();
        expression.Where(my1stWhereClause).Where(my2ndWhereClause);
        expression.OrderBy("my1stColumn");
        expression.ThenBy("my2ndColumn");
        return expression != null ? table.Where(expression) : table;
    }
4

1 回答 1

4

您需要使用您调用的每个方法的返回值,如下所示:

public IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null)
     where T : class
{
    IQueryable<T> query = GetTable<T>();
    query = query.Where(my1stWhereClause).Where(my2ndWhereClause);
    // Doing this dynamically doesn't really work..
    query = expression.OrderBy(x => x.My1stColumn)
                      .ThenBy(x => x.My2ndColumn);
    return expression != null ? query.Where(expression) : query;
}

在事先不知道的情况下,还不清楚您期望如何拥有my1stWhereClausemy2ndWhereClause不知道T......为了调用OrderByand ThenBy,您真的需要知道您正在处理的类型。

然而,构建这样的查询的想法在 LINQ 中得到了很大的支持——即使你在这里返回它,它仍然没有对数据源执行任何操作。

于 2013-05-13T05:59:27.350 回答