带有通用存储库的Dynamiclinq库

时间:2012-03-23 17:30:20

标签: generics entity-framework-4.1 repository-pattern dynamic-linq

有没有人有任何使用动态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.InternalQuery 1..ctor(InternalContext internalContext, ObjectQuery objectQuery) +170
System.Data.Entity.Internal.Linq.DbQueryProvider.CreateQuery(Expression expression) +116 DynamicLINQ.DynamicQueryable.OrderBy(IQueryable
1   source,LambdaExpression表达式)+356
  DynamicLINQ.DynamicQueryable.DynamicOrderBy(IQueryable 1 source, Func 2选择器)+58
  BusinessLayer.BusinessUnitBL.Get(Int32 pageSize,Int32   pageNumber,Int32&amp; totalPages,Func 2 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

0 个答案:

没有答案