我不是ASP的专家,所以我将不胜感激。问题连接到实体FW,ListView控件,其数据源和类型转换。
我有以下LINQ查询:
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
如果表没有JOIN,则表示一切正常。在所有其他情况下,我得到错误说只有一个LINQ语句有2个上下文。
问题是:
提前致谢。
答案 0 :(得分:1)
恰好是您观察到的错误不是数据绑定,而是LINQ。 LINQ查询是懒惰执行的,这意味着它们在绝对必要之前不会实际检索数据。这解释了为什么在.DataBind()
呼叫之前您没有看到症状。
列表视图的数据绑定语句可以采用许多不同类型的数据类型。我通常绑定IList,数组或DataTable。如果可枚举,则LINQ查询结果将始终适用。
如果将数据上下文合并到一个上下文中,则可以毫无错误地执行连接。如果该选项不可用,请首先将您的集合检索为本地列表,然后创建LINQ到对象查询。
var routesQuery = from routes in routesModel.Routes.ToList()
join locales in localesModel.Locales.ToList()
on routes.LocaleID equals locales.LocaleID
// ...
(注意:如果在加载数据.ToList()
之前预先过滤结果集,则可以获得更好的性能。)
我非常喜欢组合数据上下文的解决方案。