如何使用 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 DBML 文件添加额外的程序集引用?
与布尔值 false 进行比较时,如何防止 Linq2Sql 否定位列?