2
我想排列網格中的數據。我在網格中有多個列,單擊網格標題列表時應該按該特定列進行排序。我使用LINQ to從數據庫數據,併爲我下面的代碼進行排序:linq動態排序錯誤
var newsLetterData = _db.NewsLetterHistory.AsQueryable()
.OrderBy(**sortExp**)
.AsEnumerable()
.Select(x => x)
.ToList()
.Skip(pageIndex)
.Take(pageSize);
newsLetter = newsLetterData
.Select(x => new NewsLetterHistory
{
NewsLetterHistoryId = x.NewsLetterHistoryId,
Subject = x.Subject,
Content = x.Content,
TotalEmailSent = x.TotalEmailSent,
Receivers = x.Receivers,
CreatedDate = x.CreatedDate
})
.Select(z => z)
.ToList();
在上面的查詢中,我使用「sortby」表達對數據進行排序和波紋管我創建了這個充滿活力的排序表達式:
var paramExp = Expression.Parameter(typeof(TemplateProject.DataAccess.NewsLetterHistory),
typeof(TemplateProject.DataAccess.NewsLetterHistory).ToString());
Expression propConvExp = Expression.Convert(Expression.Property(paramExp, sortColumn), typeof(object));
var sortExp = Expression.Lambda<Func<TemplateProject.DataAccess.NewsLetterHistory, object>>(propConvExp, paramExp);
但是當我運行我的代碼,我得到錯誤:
"Unable to cast the type '
System.DateTime
' to type 'System.Object
'. LINQ to Entities only supports casting EDM primitive or enumeration types."
人有一些想法,我怎麼能解決這個或我怎麼可以創建動態排序在LINQ數據進行排序?
這裏沒有解決你的問題,你知道所有的'.Select(x => x)'都是多餘的,對'.AsEnumerable'和'.ToList'的調用正在消除性能,因爲你沒有允許SQL處理分頁(您現在正在應用程序的內存中執行此操作)。 – jessehouwing
所以我應該刪除.AsEnumerable?但.ToList對我來說是強制性的,我一次只能獲得10條記錄。 –
最後的'ToList'很好。在添加所有你的過濾條件,如Where,OrderBy,Take,Skip和Select等之前,確保你沒有ToList或AsEnumerable。這會將整個記錄集提取到客戶端並執行過濾客戶端。 – jessehouwing