C# 解决LINQ查询方法中的方法重载问题

C# 解决LINQ查询方法中的方法重载问题,c#,linq,gridview,linq-to-entities,objectdatasource,C#,Linq,Gridview,Linq To Entities,Objectdatasource,因此,这个问题的背景相当具体,但我认为有一个一般性的C#问题正在努力解决 我有一个ASP.NET Web表单页面,其中GridView控件绑定到ObjectDataSource。数据源控件连接到一个数据访问类,该类反过来使用LINQ查询实体框架v4。数据访问类上的方法具有排序/分页参数,因此我可以使用GridView/ObjectDataSource控件的内置功能。以下是一个例子: public IList<Person> GetAllPaged ( string sortE

因此,这个问题的背景相当具体,但我认为有一个一般性的C#问题正在努力解决

我有一个ASP.NET Web表单页面,其中GridView控件绑定到ObjectDataSource。数据源控件连接到一个数据访问类,该类反过来使用LINQ查询实体框架v4。数据访问类上的方法具有排序/分页参数,因此我可以使用GridView/ObjectDataSource控件的内置功能。以下是一个例子:

public IList<Person> GetAllPaged (
    string sortExpression,
    int startingRowIndex,
    int maximumRows )
{
    return _db.People
        .OrderBy( !string.IsNullOrWhiteSpace( sortExpression ) ? sortExpression : "Id" )
        .Skip( startingRowIndex )
        .Take( maximumRows )
        .ToList();
}
(来自动态LINQ帮助器类)

C#编译器解析为第一个方法(因为它优先于非扩展方法,或者因为第一个方法位于类与接口上,或者我没有想到的其他解析逻辑),这不起作用:

EntitySqlException:“Id”无法设置 已在当前范围内解决,或 上下文

有没有办法指定调用哪个重载方法(可能通过类似C++的
::
解析运算符)

我意识到我可以做到这一点:

return _db.People
    .AsQueryable()
    .OrderBy( !string.IsNullOrWhiteSpace( sortExpression ) ? sortExpression : "Id" )
    .Skip( startingRowIndex )
    .Take( maximumRows )
    .ToList();
但这让我的数据访问方法有点难看我还可以进入动态LINQ代码并将OrderBy重命名为OrderByDynamic(无需解决任何问题),但我也不希望这样做

还有其他想法吗?谢谢

要么是因为它给予优先权 对非扩展方法的改进


这是正确的假设,类的实例方法优先于扩展方法。你也已经诊断出可能的解决方法。另一种选择是直接调用扩展方法(因为它只是静态类中的一个方法)

如果您想要更清晰的解析,您可以像静态方法一样调用它,而不是扩展方法

IQueryable<People> query = DynamicLinqHelperClass
  .OrderBy(_db.People, sortExpression)
  .Skip(startingRowIndex)
  .Take(maximumRows)
IQueryable查询=DynamicLinqHelperClass
.OrderBy(_db.People,sortExpression)
.Skip(开始行索引)
.Take(最大行数)
return _db.People
    .AsQueryable()
    .OrderBy( !string.IsNullOrWhiteSpace( sortExpression ) ? sortExpression : "Id" )
    .Skip( startingRowIndex )
    .Take( maximumRows )
    .ToList();
IQueryable<People> query = DynamicLinqHelperClass
  .OrderBy(_db.People, sortExpression)
  .Skip(startingRowIndex)
  .Take(maximumRows)