1

我有两个表 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();

它对我有用。谢谢。

4

1 回答 1

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

您在新查询中获得的许多代码似乎有点过时 - 包括结果的创建。

更新 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();
于 2013-10-04T07:43:24.607 回答