Telerik Kendo UI MVC Grid数据源结果对象列表

时间:2016-02-19 03:47:20

标签: asp.net-mvc entity-framework kendo-ui telerik kendo-asp.net-mvc

Telerik Kendo UI MVC Grid充满了来自T1ViewModel的数据(从DB2中的T1和DB2中的T2加入,其中T1和T2是表,DB1和DB2是数据库)。

T1有一个ShopID列,而ShopName列存在于DB2的T2中。我正在使用两个上下文的EntityFramwork。

将T1数据加载到内存中,然后加入T2。 因为我每页只显示10条记录,所以T1和T2有数百万条记录,这种连接发生在每次更改页面时都会达到性能。

然后我使用DataSoureceRequest来过滤T1记录。

public ActionResult T1_Read([DataSourceRequest] DataSourceRequest request)
{
using(var context = new DB1Context())
{//Get requested records from T1 into T1ViewModel which has shop name property
DataSourceResult result = context.T1.select(r => new T1ViewModel{ShopId = r.ShopID.....}).ToDataSourceResult(request)
}
IEnumerable<T1ViewModel> T1RecordsFiltered = result.data;
var ShopIds = T1RecordsFiltered.Select(T => T.ShopID);

using(var context = new DB2Context())
{//Get the T2 records that has matching ShopId in the list(ShopIds)
var T2RecordsFiltered = context.T2.Where(T => ShopIds.Contains(T.ShopID)).ToList();
}
var t1ViewModel = from t1rf in T1RecordsFiltered
              join t2rf in T2RecordsFiltered on t1rf.ShopID equals t2rf.ShopID into t2rfGroup
              from t2rfg in t2rfGroup.DefaultIfEmpty()
              select new { t1rf, t2rfg };

var t1ViewModelDetails = t1ViewModel.Select(t =>
            {
                t.t1rf.ShopName = t.t2rfg.ShopName;
                return t.t1rf;
            });           
result.data = t1ViewModelDetails;

return Json(result, JsonRequestBehavior.AllowGet);  
}

现在的问题是 我的网格也是可分组的。但是当我使用该功能时,result.data具有AggregateFunctionsGroup列表。所以我无法将result.data转换为T1ViewModel列表。 这是正确的方法吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

找到解决方案。而不是依赖于dataSourceResult的数据,我使用ToDataSourceResult重载方法来创建t1ViewModel列表并修改tViewModels以更新shopName,如下所示。

CREATE TABLE dbo.picturebox     (
    pbID int NOT NULL,
    pbName nvarchar(50) NOT NULL,
    pbSize1 float(53) NULL,
    pbSize2 float(53) NULL,
    pbBackGroundImage image NULL
    )  ON [PRIMARY]
     TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.picturebox SET (LOCK_ESCALATION = TABLE)
GO
COMMIT