查询前建立LINQ表达式
本文关键字:表达式 LINQ 建立 查询 | 更新日期: 2023-09-27 18:13:11
我正在使用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;
}
您需要使用每个调用方法的返回值,如下所示:
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;
}
如果事先不知道T
,你怎么能期望有my1stWhereClause
和my2ndWhereClause
呢?为了调用OrderBy
和ThenBy
,你真的需要知道你正在处理的类型。
然而,构建这样一个查询的想法在LINQ中是非常支持的——即使当你在这里返回它时,它仍然不会对数据源执行任何操作。