2010-06-16 5 views
2

Я пытаюсь создать источник данных для сортировки объектов и сортировки, который перед выполнением возвращает все результаты, затем сортирует эти результаты перед фильтрацией, а затем использует методы take и skip с целью извлечения только части результатов из базы данных (сохранение на трафике базы данных). это основано на следующей статье:GridView ObjectDataSource LINQ Пейджинг и сортировка с использованием множественного запроса таблицы

http://www.singingeels.com/Blogs/Nullable/2008/03/26/Dynamic_LINQ_OrderBy_using_String_Names.aspx

Теперь мне удалось получить эту работу, даже создавая лямбда-выражения для отражения выражение сортировки возвращается из сетки даже узнать тип данных для сортировки для DateTime и Decimal ,

public static string GetReturnType<TInput>(string value) 
     { 
      var param = Expression.Parameter(typeof(TInput), "o"); 
      Expression a = Expression.Property(param, "DisplayPriceType"); 
      Expression b = Expression.Property(a, "Name"); 
      Expression converted = Expression.Convert(Expression.Property(param, value), typeof(object)); 
      Expression<Func<TInput, object>> mySortExpression = Expression.Lambda<Func<TInput, object>>(converted, param); 
      UnaryExpression member = (UnaryExpression)mySortExpression.Body; 
      return member.Operand.Type.FullName; 
     } 

Теперь проблема у меня есть, что многие возвращения запросов присоединились таблицы, и я хотел бы отсортировать по полям из других таблиц.

Таким образом, при выполнении запроса вы можете создать функцию, которая присваивает свойствам из других таблиц свойствам, созданным в частичном классе.

public static Account InitAccount(Account account) 
     { 
      account.CurrencyName = account.Currency.Name; 
      account.PriceTypeName = account.DisplayPriceType.Name; 
      return account; 
     } 

Так что мой вопрос, есть ли способ, чтобы присвоить значение из присоединяемой таблицы к свойству текущего табличного частичного класса? я попытался использовать.

from a in dc.Accounts 
           where a.CompanyID == companyID 
           && a.Archived == null 
           select new { 
PriceTypeName = a.DisplayPriceType.Name}) 

, но это, похоже, испортило мое SortExpression.

Любая помощь по этому поводу была бы очень признательна, я понимаю, что это сложный материал.

ответ

1

Это функциональное программирование. Мутирование учетной записи путем выполнения задания отсутствует. New-ING нового экземпляра формы, которую в

Шаг 1:. Объявляет класс, который имеет форму результата вы хотите:

public class QueryResult 
{ 
    public int CompanyID {get;set;} 
    public string CurrencyName {get;set;} 
    public string PriceTypeName {get;set;} 
} 

Шаг 2: проект в этот класс в ваш запрос

from ... 
where ... 
select new QueryResult() 
{ 
    CompanyID = a.CompanyID, 
    CurrencyName = a.Currency.Name, 
    PriceTypeName = a.PriceType.Name 
}; 

Шаг 3: Прибыль! (порядок от этого)

Генератор запросов будет использовать детали вашего типа QueryResult для генерации предложения select с этой формой.

+0

Thats блестящий спасибо за это. Я решил спуститься, создав MSSQL Views. Поскольку этот способ предполагает создание новых частичных классов для каждой страницы на сайте. Определенно, что-то в голове. ура – Bodar

Смежные вопросы