[英]GridView Filtering with ObjectDataSource using Custom Paging
[英]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.