C# 解决LINQ查询方法中的方法重载问题
因此,这个问题的背景相当具体,但我认为有一个一般性的C#问题正在努力解决 我有一个ASP.NET Web表单页面,其中GridView控件绑定到ObjectDataSource。数据源控件连接到一个数据访问类,该类反过来使用LINQ查询实体框架v4。数据访问类上的方法具有排序/分页参数,因此我可以使用GridView/ObjectDataSource控件的内置功能。以下是一个例子: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
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)