[英]sorting Grid View column with foreign key to different entity using LINQto SQL
在此實現中,我們必須有實體“公司”和“公司”。連接到數據庫后,我使用LINQ to SQL設計器創建了實體對象。 公司實體的主頁是顯示它所屬的公司; 因此,在網格中,我們將具有以下列:
公司名稱| 公司名稱| 描述
公司表中只有公司ID,沒有公司名稱; 但是LINQ可以加載公司對象並訪問公司記錄的名稱。
由於已啟用網格列的排序,因此用戶可以單擊列以按該列對結果進行排序(DESC或ASC)
排序對CompanyName和Description很好,但對* CorporateName *不起作用!
下面是對網格數據進行排序的代碼
varentityType = typeof(Entities.Company);
//load company list based on Business Unit selected
var companyList = LoadCompanyRecords());// return type IQueryable<Entities.Company>
//if filters are used -> filter the results
companyList = FilterResults(companyList);//return type is IQueryable<Entities.Company>
// order by work flow starts
const string ascSortMethodName = "OrderBy";
const string descSortMethodName = "OrderByDescending";
var sortMethod = ascSortMethodName;
var orderdirection = GetSortDirection(e.SortExpression);
if (orderdirection == "DESC")
sortMethod = descSortMethodName;
//var entityType = typeof(Entities.Company);
var property = entityType.GetProperty(e.SortExpression);
var parameter = Expression.Parameter(entityType, "p");
var propertyAccess = Expression.MakeMemberAccess(parameter, property);
var orderByExp = Expression.Lambda(propertyAccess, parameter);
MethodCallExpression resultExp = Expression.Call(
typeof(Queryable),
sortMethod,
new Type[] { entityType, property.PropertyType },
companyList.Expression,
Expression.Quote(orderByExp));
var result = companyList.Provider.CreateQuery<Entities.Company>(resultExp);
gvAssets.DataSource = result;
gvAssets.DataBind();
有人遇到過這個嗎? 什么是處理不屬於當前實體的列的最佳方法? 還是我應該考慮編寫一個sql join查詢還是一個存儲過程?
感謝您的幫助。
臨時的解決方案是檢查該列名,並確保其具有自己的排序功能,如下所示:
var sortColumn = e.SortExpression;
if (sortColumn == "CorporateGroupName")
{
if (orderdirection == "DESC")
result = companyList.OrderByDescending(x => x.CorporateGroup.CorporateGroupName).ToList();
else
result = companyList.OrderBy(x => x.CorporateGroup.CorporateGroupName).ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.