Библиотека Dynamiclinq с общим хранилищем - PullRequest
2 голосов
/ 23 марта 2012

У кого-нибудь есть примеры использования динамической библиотеки 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"]) Кажется, я только начинаю работать над конкретной реализацией.


UPDATE:

Вот некоторый пример кода, вместо того, чтобы перемещать его вверх по стеку в хранилище, которого я стараюсь избегать, так как в настоящее время хранилища действительно чисты, я помещаю его на бизнес-уровень (что хорошо момент).

    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);

        ...
     }

И называя это как-то так:

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<br> System.Data.Entity.Internal.Linq.DbQueryProvider.CreateQuery(Expression expression) +116 DynamicLINQ.DynamicQueryable.OrderBy(IQueryable 1 источник, выражение LambdaExpression) + 356
DynamicLINQ.DynamicQueryable.DynamicOrderBy (селектор IQueryable 1 source, Func 2) + 58
BusinessLayer.BusinessUnitBL.Get (Int32 pageSize, Int32 pageNumber, Int32 и totalPages, Func 2 orderBy, Expression 1 где) в 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 д) в C: \ TEST \ BusinessUnit.aspx.cs: 49
System.Web.UI.Control.LoadRecursive () + 74
System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 2207

...