Gridview 排序 - 从 Entity Framework 中获取按任意排序表达式排序的数据
Gridview sorting - fetching data sorted by arbitrary sort expression from Entity Framework
我有一个 ASP.NET 4.5 webforms 应用程序,它基于一组 ASP.NET WebAPI REST 服务,为页面提供数据,我正在使用 strongly-typed 数据控件和 webforms 数据绑定来简化我的代码。
在我的 ASPX 页面上,我想显示一个网格并允许用户通过单击列 headers 对显示的数据进行排序。我无法让排序正常工作。 ASPX 方面工作正常 - 我向我的 GetMethod
添加了一个 string sortExpression
参数并且它被正确填充(使用 Title
或 Title DESC
如果我点击 Title
列),具有按列定义的配置排序表达式。
public List<MyBasicDto> GetData(string sortByExpression, int startRowIndex, int maximumRows, out int totalRowCount)
{
return _client.GetMyData(sortByExpression, startRowIndex, maximumRows, out totalRowCount);
}
但是,在 server-side(在我的 ASP.NET WebAPI REST 服务中),我无法使用 EF 6.1.3 从我的数据库 table 获取数据。
public List<MyBasicDto> GetBasicDto(string sortby, int startrow, int maxrows)
{
try
{
int skip = startrow > 0 ? startrow - 1 : 0;
string sortExpression = sortby ?? "DateEntered DESC";
List<MyEntity> entities = _dbContext.MyEntity.OrderBy(sortExpression).Skip(skip).Take(maxrows).ToList();
List<MyBasicDto> results = Mapper.Map<List<MyEntity>, List<MyBasicDto>>(entities);
return results;
}
catch (Exception exc)
{
Log.Fatal("GetBasicDto - Exception", exc);
}
return null;
}
问题发生在编译时,当我得到这个编译器错误时:
The type arguments for method 'System.Linq.Queryable.OrderBy(System.Linq.IQueryable, System.Linq.Expressions.Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
???我在网上找到的所有示例似乎都是这样工作的——将排序表达式作为字符串提供给 .OrderBy()
Linq 方法——我的代码有什么问题?这个错误到底是什么意思(对我来说听起来很神秘)?
如评论中所述,System.LINQ OrderBy 方法需要委托而不是字符串,因此会出现错误。
您将必须使用 Dynamic Linq,如 ScottGu's Blog 中所示。
我有一个 ASP.NET 4.5 webforms 应用程序,它基于一组 ASP.NET WebAPI REST 服务,为页面提供数据,我正在使用 strongly-typed 数据控件和 webforms 数据绑定来简化我的代码。
在我的 ASPX 页面上,我想显示一个网格并允许用户通过单击列 headers 对显示的数据进行排序。我无法让排序正常工作。 ASPX 方面工作正常 - 我向我的 GetMethod
添加了一个 string sortExpression
参数并且它被正确填充(使用 Title
或 Title DESC
如果我点击 Title
列),具有按列定义的配置排序表达式。
public List<MyBasicDto> GetData(string sortByExpression, int startRowIndex, int maximumRows, out int totalRowCount)
{
return _client.GetMyData(sortByExpression, startRowIndex, maximumRows, out totalRowCount);
}
但是,在 server-side(在我的 ASP.NET WebAPI REST 服务中),我无法使用 EF 6.1.3 从我的数据库 table 获取数据。
public List<MyBasicDto> GetBasicDto(string sortby, int startrow, int maxrows)
{
try
{
int skip = startrow > 0 ? startrow - 1 : 0;
string sortExpression = sortby ?? "DateEntered DESC";
List<MyEntity> entities = _dbContext.MyEntity.OrderBy(sortExpression).Skip(skip).Take(maxrows).ToList();
List<MyBasicDto> results = Mapper.Map<List<MyEntity>, List<MyBasicDto>>(entities);
return results;
}
catch (Exception exc)
{
Log.Fatal("GetBasicDto - Exception", exc);
}
return null;
}
问题发生在编译时,当我得到这个编译器错误时:
The type arguments for method 'System.Linq.Queryable.OrderBy(System.Linq.IQueryable, System.Linq.Expressions.Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
???我在网上找到的所有示例似乎都是这样工作的——将排序表达式作为字符串提供给 .OrderBy()
Linq 方法——我的代码有什么问题?这个错误到底是什么意思(对我来说听起来很神秘)?
如评论中所述,System.LINQ OrderBy 方法需要委托而不是字符串,因此会出现错误。
您将必须使用 Dynamic Linq,如 ScottGu's Blog 中所示。