有没有人有任何使用动态linq库和通用存储库模式的例子?
http://nuget.org/packages/DynamicLINQ
http://weblogs.asp.net/davidfowler/archive/2010/08/19/dynamic-linq-part-2-evolution.aspx
我发现的问题是dynamicorderby()返回IQueryable,所以我不能在通用存储库中真正使用它。而且它的排序很酷,例如orderby(o => o [“mycolumn”])我似乎只能开始具体的实现。
更新:
这是一些示例代码,而不是将其向上移动到存储库中,我试图避免,因为此时存储库非常干净,我将它放入业务层(这是可以的那一刻)。
public IEnumerable<BusinessUnitUser> GetUsers(int pageSize, int pageNumber, out int totalPages, Func<dynamic, dynamic> orderBy, Expression<Func<BusinessUnitUser, bool>> where = null)
{
IQueryable<dynamic> dynamicQuery = buUserRepository.Get(pageSize, pageNumber, out totalPages).DynamicOrderBy(orderBy);
...
}
用sometihng调用它:
userBL.GetUsers(gvUser.PageSize, gvUser.PageIndex, out recordCount, o => o["UserID"])
我已经......因为我还没有想到如何将它投射到IEnumerable,但那还不是问题。
主要问题是我收到错误
无法投射类型的对象 'System.Data.Objects.ObjectQuery
1[BusinessUnitUser]' to type 'System.Data.Objects.ObjectQuery
1 [System.Object的]'。
这是由.DynamicOrderBy(orderBy)引起的;
编辑:这是堆栈跟踪
[InvalidCastException:无法转换类型的对象 'System.Data.Objects.ObjectQuery
1[EntityLayer.BusinessUnit]' to type 'System.Data.Objects.ObjectQuery
1 [System.Object的]'。]
System.Data.Entity.Internal.Linq.InternalQuery1..ctor(InternalContext internalContext, ObjectQuery objectQuery) +170
1 source,LambdaExpression表达式)+356
System.Data.Entity.Internal.Linq.DbQueryProvider.CreateQuery(Expression expression) +116 DynamicLINQ.DynamicQueryable.OrderBy(IQueryable
DynamicLINQ.DynamicQueryable.DynamicOrderBy(IQueryable1 source, Func
2选择器)+58
BusinessLayer.BusinessUnitBL.Get(Int32 pageSize,Int32 pageNumber,Int32&amp; totalPages,Func2 orderBy, Expression
1 where)in C:\ TEST \ BusinessUnitBL.cs:23
UserInterface.Pages.Multitenant.BusinessUnit.DataBindBusinessUnits() 在C:\ TEST \ BusinessUnit.aspx.cs:159
UserInterface.Pages.Multitenant.BusinessUnit.SetGridPagerSettings() 在C:\ TEST \ BusinessUnit.aspx.cs:177
UserInterface.Pages.Multitenant.BusinessUnit.OnLoad(EventArgs的 e)在C:\ TEST \ BusinessUnit.aspx.cs:49
System.Web.UI.Control.LoadRecursive()+74
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 2207