使用 Linq to sql 从两个表中获取所有数据
Posted
技术标签:
【中文标题】使用 Linq to sql 从两个表中获取所有数据【英文标题】:Get all data from both table using Linq to sql 【发布时间】:2013-10-09 23:24:13 【问题描述】:我有两个表 BIReport 和 tblFormat。我在我的项目中使用 linq to sql。
我想使用 linq to sql 获取数据,这将与以下查询相同。
Select A.*,B.* from Report A inner join tblFormat B on A.ReportId = B.SettingId.
使用上面的查询,它将从两个表中获取所有数据。那么如何使用 linq to sql 从两个表中接收所有数据。
更新:
<form id="form1" runat="server">
<div>
<asp:GridView ID="grddata" runat="server"></asp:GridView>
</div>
</form>
更新2:
我的查询:
var QInnerJoin1 = (from p in objtest.Reports
join p2 in objtest.tblFormats
on p.ReportId equals p2.SettingID
where p2 != null
select new p, p2 ).ToList();
grddata.DataSource = QInnerJoin1;
grddata.DataBind();
我的错误和数据![在此处输入图片描述][2]
解决方案:
我为需要绑定到网格视图的属性创建了一个类:
public class TestLinqToSql
public int ReportId get; set;
public string ReportName get; set;
public string FormatName get; set;
然后我按照以下方式将我的 linq 更新为 sql:
List<TestLinqToSql> objList = (from p in objtest.Reports
join p2 in objtest.tblFormats
on p.ReportId equals p2.SettingID
where p2 != null
select new TestLinqToSql()
ReportId = p.ReportId,
ReportName = p.ReportName,
FormatName = p2.FormatName
).ToList();
grddata.DataSource = objList1;
grddata.DataBind();
它对我有用。 谢谢。
【问题讨论】:
使用此链接***.com/questions/2085422/… 你能把你的gridview html放在你的问题中 嗨,Shekhar,我已经放了 gridview html。 你有没有检查过qtestt在绑定之前是否包含数据? 你里面好像没有数据data source
请检查你的查询结果中有没有数据。
【参考方案1】:
我认为您遇到的错误是因为您试图将结果(本地内存对象)与类别(数据库对象)连接起来。为了解决这个问题,您需要在本地结果对象上使用 Contains 并删除结果和类别之间的连接。然后,就在您选择之前,您将拥有:
// Your old code here
where result.Contains (sc.ID) // new code here
select new sc, st ).ToList();
更新
实际上,查看您的要求与您所获得的代码,然后类似以下的内容不起作用吗?
var innerJoinQuery =
(from A in Reports
join B in ChartSetting on A.ReportId equals B.ReportId
select new A, B ).ToList();
在语法上与
相同Select A.*,B.* from Reports A inner join ChartSetting B on A.ReportId = B.ReportId
您在新查询中获得的许多代码似乎有些过时 - 包括结果的创建。
更新 2
您发布的项目列表的 ChartSetting 值为 NULL,因此如果您确实无法更改数据库,请尝试以下操作:
var innerJoinQuery =
(from A in Reports
join B in ChartSetting on A.ReportId equals B.ReportId
where B != null
select new A, B ).ToList();
【讨论】:
HI Andrew 感谢您的回复,但仍然出现错误,因为我已经提到了我的上述评论。 如果你在 grddata.DataBind() 上放了一个断点;那么被调试的说qtestt的值是什么? 请看我上面的更新。我认为问题出在您的第 6 项为 NULL 中。上面的代码应该对其进行排序。 好的。这绝对应该根据您的 SQL 标准起作用。您能否检查您的数据库并确保 Reports.ReportId 和 ChartSetting.ReportID 之间存在外键关系,并且这些字段中的任何一个都没有 NULL 值? 我已经检查了您在上述评论中提到的所有内容,但仍然无法正常工作。它给出了错误。以上是关于使用 Linq to sql 从两个表中获取所有数据的主要内容,如果未能解决你的问题,请参考以下文章