我有两个表BIReport和tblFormat。我在我的项目中使用linq到sql。
我想使用linq到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>
UPDATE2:
我的查询:
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]
解决方案:
我已经创建了一个属性类,我需要绑定到Grid视图:
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();
它适合我。 感谢。
答案 0 :(得分:0)
我认为您得到的错误是因为您尝试将结果(本地内存对象)与类别(数据库对象)连接起来。为了解决这个问题,您需要在本地结果对象上使用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
您在新查询中获得的许多代码似乎有点过时 - 包括创建结果。
您发布的项目列表的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();