我想創建一個頁面和排序對象的數據源,在執行之前返回所有結果,然後在過濾之前對這些結果進行排序,然後使用take和skip方法從數據庫中檢索結果的子集(保存數據庫流量)。這是基於以下文章:GridView的ObjectDataSource LINQ的分頁和使用多個表查詢排序
http://www.singingeels.com/Blogs/Nullable/2008/03/26/Dynamic_LINQ_OrderBy_using_String_Names.aspx
現在,我已經成功地得到這個工作,甚至創造lambda表達式以反映排序表達式從電網恢復甚至找出數據類型進行排序的日期時間和小數。
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。
對此的任何幫助將不勝感激,我明白,這是複雜的東西。
非常感謝。我決定下載創建MSSQL視圖。這種方式將涉及爲網站上的每個頁面創建新的部分類。這絕對是一件需要銘記的事情。乾杯 – Bodar 2010-06-16 16:30:42