小编Laz*_*az5的帖子

MethodCallExpression orderby

我正在尝试使用表达式树构建 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)

c# linq entity-framework

5
推荐指数
1
解决办法
1507
查看次数

标签 统计

c# ×1

entity-framework ×1

linq ×1