Linq 数据绑定ListView数据源和联接表

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

我不是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
如果没有表的联接,则一切正常。在所有其他情况下,我得到的错误是,只有一个LINQ语句有两个上下文

问题是:

  • ListView数据源可以接受除ObjectQuery之外的哪些类型
  • 如何将LINQ返回的匿名类型转换为ObjectQuery

  • 提前感谢。

    在这种情况下,您观察到的错误不是由于数据绑定,而是由于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()
    之前对结果集进行预筛选,则可以获得更好的性能)


    我非常喜欢结合数据上下文的解决方案。

    你是我的英雄,非常感谢!