簡體   English   中英

使用LINQto SQL將帶有外鍵的Grid View列排序到不同實體

[英]sorting Grid View column with foreign key to different entity using LINQto SQL

在此實現中,我們必須有實體“公司”和“公司”。連接到數據庫后,我使用LINQ to SQL設計器創建了實體對象。 公司實體的主頁是顯示它所屬的公司; 因此,在網格中,我們將具有以下列:

公司名稱| 公司名稱| 描述

公司表中只有公司ID,沒有公司名稱; 但是LINQ可以加載公司對象並訪問公司記錄的名稱。

由於已啟用網格列的排序,因此用戶可以單擊列以按該列對結果進行排序(DESC或ASC)

排序對CompanyNameDescription很好,但對* 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.

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