如何使用 linq2sql 在单个 gridview 或 gridpanel 中显示来自多个表的数据?

Posted

技术标签:

【中文标题】如何使用 linq2sql 在单个 gridview 或 gridpanel 中显示来自多个表的数据?【英文标题】:How to display data from multiple tables in a single gridview or gridpanel using linq2sql? 【发布时间】:2014-01-14 06:59:54 【问题描述】:

我有两个 sql 表 Department 和 Lecturer:

Department: DepartmentID, Name
Lecturer: LecturerID, Name, DepartmentID

我想在带有列的表格中显示数据:

Lecturer ID, Name and Department Name

如何使用 Linq to Sql(有或没有 lambda 表达式)来实现这一点?我真的很感谢你的帮助。谢谢。

【问题讨论】:

【参考方案1】:

Department 表和 Lecturer 表之间需要连接

DataClassesDataContext tdc = new DataClassesDataContext();

var res = (from p in tdc.Lecturers

               join br in tdc.Departments on p.DepartmentID equals br.DepartmentID

               select new
               
                   p.DepartmentID,
                   p.Name,
                   lectID = p.DepartmentID,
                   depname = br.Name
               
                   ).ToList();

你的查询会是这样的

http://www.dotnetperls.com/join

【讨论】:

我试过了,但错误提示“匿名类型不能有多个同名的属性”。 @FREAKYHUNTER 我已经更新了我的代码,这将解决你的问题【参考方案2】:

感谢您的回答 singhm0077。我对 join 有点困惑,不幸的是它并没有像我想象的那样工作。幸运的是,我找到了另一个解决方案。

由于表 Lecturer 中没有列 DepartmentName,我必须创建 Lecturer 表的部分类,因为我是将绑定 Lecturer 表中的数据,并且我定义了一个属性 DepartmentName,它在数据库表中添加了一个列。

public partial class Lecturer
    
        public string DepartmentName
        
            get;
            set;
        
    

设计部分是:

<ext:GridPanel ID="grid1" runat="server" Width="600px" Header="false">
            <Store>
                <ext:Store ID="store1" runat="server">
                    <Model>
                        <ext:Model ID="model1" runat="server">
                            <Fields>
                                <ext:ModelField Name="LecturerID" Type="Int" />
                                <ext:ModelField Name="Name" Type="String" />
                                <ext:ModelField Name="DepartmentName" Type="String" />
                            </Fields>
                        </ext:Model>
                    </Model>
                </ext:Store>
            </Store>
            <ColumnModel>
                <Columns>
                    <ext:Column ID="colLecturerID" runat="server" Flex="1" DataIndex="LecturerID" Text="Lecturer ID"></ext:Column>
                    <ext:Column ID="colName" runat="server" Flex="1" DataIndex="Name" Text="Name"></ext:Column>
                    <ext:Column ID="colDepartmentName" runat="server" Flex="1" DataIndex="DepartmentName" Text="Department Name"></ext:Column>
                </Columns>
            </ColumnModel>
        </ext:GridPanel>

而使用linq2sql,后面的代码是:

protected void Page_Load(object sender, EventArgs e)
        
            if (!X.IsAjaxRequest)
            
                this.store1.DataSource = GetDataToBind();
                this.store1.DataBind();
            
        

        private List<Lecturer> GetDataToBind()
        
            DataBaseDataContext db = new DataBaseDataContext();

            List<Lecturer> lstLecturers = db.Lecturers.OrderBy(x => x.LecturerID).ToList();
            foreach (Lecturer lecturer in lstLecturers)
            
                lecturer.DepartmentName = lecturer.Department.Name;
            

            return lstLecturers;
        

最后,如果数据库如下:

输出如下所示:

不过,我不知道这是否是最好的方法。但是,它一直在工作。

【讨论】:

以上是关于如何使用 linq2sql 在单个 gridview 或 gridpanel 中显示来自多个表的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 linq2sql 模型?

如何向 Linq2SQL DBML 文件添加额外的程序集引用?

LINQ2SQL 根据大 where 选择行

与布尔值 false 进行比较时,如何防止 Linq2Sql 否定位列?

2012年用linq2sql启动新的企业大型web应用是不是明智

LINQ2SQL 事务的性能