我正在尝试使用表达式树构建 lambda 查询,以使其在整个应用程序中通用。我的初步尝试基于此处找到的代码。我更改了代码,以便它执行比较以返回姓氏刚好在 searchText 之前的 100 个实体,如下所示:
TEntity entity = entitySet.FirstOrDefault();
string searchName = entity.GetType().GetProperty("SearchName").ToString();
searchText = "Baker";
int records = 100;
IQueryable<TEntity> queryableData = entitySet.AsQueryable<TEntity>();
var param = Expression.Parameter(typeof(TEntity), searchName);
var body = Expression.LessThan(Expression.Call(
typeof(string),
"Compare",
null,
Expression.PropertyOrField(param, searchName),
Expression.Constant(searchText)),
Expression.Constant(0));
var lambda = Expression.Lambda<Func<TEntity, bool>>(body, param);
MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { typeof(TEntity) },
queryableData.Expression,
lambda);
var data = entitySet.AsQueryable<TEntity>().Provider.CreateQuery<TEntity>(whereCallExpression).Take(records);
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,它从数据库中返回 100 个位于我的 searchText 之前的实体,但它们是错误的实体,因为它们在 entitySet 中没有按顺序排列。因此,我的表达式树中需要一个 OrderBy 子句,以便获得“Azure”、Axel、Avis 等。
我试过这个:
MethodCallExpression orderByCallExpression …Run Code Online (Sandbox Code Playgroud)