Linq 数据绑定ListView数据源和联接表
我不是ASP方面的专家,因此非常感谢您的帮助。与实体FW、ListView控件及其数据源和类型转换有关的问题 我有以下LINQ查询:Linq 数据绑定ListView数据源和联接表,linq,listview,join,datasource,Linq,Listview,Join,Datasource,我不是ASP方面的专家,因此非常感谢您的帮助。与实体FW、ListView控件及其数据源和类型转换有关的问题 我有以下LINQ查询: RoutesEntities routesModel = new RoutesEntities(); LocalesEntities localesModel = new LocalesEntities(); ObjectQuery routesQuery = (ObjectQuery) from routes in routesModel.Routes
RoutesEntities routesModel = new RoutesEntities();
LocalesEntities localesModel = new LocalesEntities();
ObjectQuery routesQuery = (ObjectQuery) from routes in routesModel.Routes
join locales in localesModel.Locales
on routes.LocaleID equals locales.LocaleID
where locales.IsActive == true
select new {
LocaleID = routes.LocaleID,
RouteName = routes.RouteName
};
AdminTopListView.DataSource = routesQuery;
AdminTopListView.DataBind(); // this line cause the error
如果没有表的联接,则一切正常。在所有其他情况下,我得到的错误是,只有一个LINQ语句有两个上下文
问题是:
提前感谢。在这种情况下,您观察到的错误不是由于数据绑定,而是由于LINQ。LINQ查询是延迟执行的,这意味着它们在绝对必要之前不会实际检索数据。这解释了为什么在调用
.DataBind()
之前不会看到症状
列表视图的数据绑定语句可以采用多种不同的数据类型。我通常绑定IList、数组或数据表。如果可枚举,LINQ查询结果将始终适用
如果将数据上下文组合到一个上下文中,则可以执行连接而不会出错。如果该选项不可用,请首先将集合作为本地列表检索,然后创建LINQ to objects查询
var routesQuery = from routes in routesModel.Routes.ToList()
join locales in localesModel.Locales.ToList()
on routes.LocaleID equals locales.LocaleID
// ...
(注意:如果在加载数据.ToList()
之前对结果集进行预筛选,则可以获得更好的性能)
我非常喜欢结合数据上下文的解决方案。你是我的英雄,非常感谢!