簡體   English   中英

使用多表查詢的GridView ObjectDataSource LINQ分頁和排序

[英]GridView ObjectDataSource LINQ Paging and Sorting using multiple table query

我正在嘗試創建一個分頁和排序對象數據源,該數據源在執行之前返回所有結果,然后在過濾之前對這些結果進行排序,然后使用take和skip方法,目的是僅從數據庫中檢索結果的一部分(保存在數據庫流量)。 這是基於以下文章:

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

現在,即使創建了lambda表達式來反映從網格返回的排序表達式,甚至找到要對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:聲明一個具有所需結果形狀的類:

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

第三步:贏利! (按此排序)

查詢生成器將使用QueryResult類型的詳細信息來生成具有該形狀的select子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM