Subsonic 亚音速内连接

Subsonic 亚音速内连接,subsonic,inner-join,Subsonic,Inner Join,我试图显示与输入文本框的姓氏匹配的所有记录。 这需要在“volID”列上进行内部联接,因为有两个表 <asp:TextBox ID="lName" runat="server"></asp:TextBox> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" Visible="true"></asp:GridView> <asp:linkButton I

我试图显示与输入文本框的姓氏匹配的所有记录。 这需要在“volID”列上进行内部联接,因为有两个表

<asp:TextBox ID="lName" runat="server"></asp:TextBox>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" Visible="true"></asp:GridView>
<asp:linkButton ID="btnSubmit" runat="server" onclick="btnSubmit_Click" />
我试着在亚音速网站上做这件事,但并没有成功。在下面列出错误

Server Error in '/' Application. 
________________________________________
The objects "dbo.pastAwardNames" and "dbo.pastAwardNames" in the FROM clause have the same exposed names. Use correlation names to distinguish them. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: The objects "dbo.pastAwardNames" and "dbo.pastAwardNames" in the FROM clause have the same exposed names. Use correlation names to distinguish them.

Source Error: 

Line 30: 
Line 31: 
Line 32:         GridView1.DataSource = new Select("*")
Line 33:             .From(PastAwardName.Schema)
Line 34:             .InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)

这个查询似乎是对的,不确定问题出在哪里

您可以通过创建一个简单的集合来重写它,然后将它绑定到网格视图,看看是否会出现相同的错误吗


你有没有检查过这个

我想我们在2.2中修复了这个问题-但我确实记得2.1中也有一个修复。您是否尝试过为InnerJoin使用重载,该重载包含四个参数


听起来您正在使用2.1-如果是这样,您可以尝试2.2,因为我认为我们已经对此进行了修复。另外-InnerJoin有一些重载,您可以显式地告诉它要在哪些表和列上进行连接。

我认为您的连接行需要反转

.InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)
应该是

.InnerJoin(PastAwardType.VolIDColumn, PastAwardName.VolIDColumn)

谢谢你的回复。它现在使用以下代码工作:

private void BuildGridView1()
    {
        GridView1.DataSource = new Select(PastAwardName.Schema.TableName + ".*", PastAwardType.Schema.TableName + ".*")
              .From(PastAwardName.Schema)
              .InnerJoin(PastAwardType.Schema.TableName, PastAwardType.Columns.VolID, PastAwardName.Schema.TableName, PastAwardName.Columns.VolID)
              .Where(PastAwardName.Columns.LName).Like(this.txtSearchName.Text)
              .OrderAsc(PastAwardType.Columns.AwardYear)
              .ExecuteDataSet();
    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        BuildGridView1();
        GridView1.PageIndex = e.NewPageIndex;
        GridView1.DataBind();
    }

只是偶然发现了同样的问题。 问题是,如果没有像Brett提到的那样构建selectpart,我无法(或者至少不知道如何)从联接中的第二个表定义列

DB.Select(Table1.Schema.TableName + "." + Table1.Columns.Id,
          Table1.Schema.TableName + "." + Table1.Columns.Name,
          Table2.Schema.TableName + "." + Table2.Columns.Caption
         ).From<Table1>()
          .LeftOuterJoin(Table2.Table1_IdColumn, Table1.IdColumn);
DB.Select(Table1.Schema.TableName+“+Table1.Columns.Id,
Table1.Schema.TableName+““+Table1.Columns.Name,
Table2.Schema.TableName+“+”Table2.Columns.Caption
).From()
.LeftOuterJoin(表2.1_-IdColumn,表1.IdColumn);
可以,但需要使用

DB.Select(Table1.IdColumn, Table2.CaptionColumn)
  .From<Table2>()
  .LeftOuterJoin(Table2.Table1_IdColumn, Table1.IdColumn);
DB.Select(表1.IdColumn,表2.CaptionColumn)
.From()
.LeftOuterJoin(表2.1_-IdColumn,表1.IdColumn);

相反

我遇到了与此类似的问题,通过搜索错误文本“在FROM子句中具有相同的公开名称”和亚音速2.2发现了此页面

不管怎样,我想我会发布我的代码,它在亚音速2.2中工作得非常完美,看起来非常干净

希望有人发现它有用,因为它让我挠头了一段时间

IDataReader reader = new SubSonic.Select(CityMapping.MasterCityColumn, CityMapping.ChildCityColumn, CityMappingTourType.TourTypeCodeColumn)
                .From<CityMapping>()
                .InnerJoin(CityMappingTourType.CityMappingIDColumn, CityMapping.IdColumn)
                .OrderAsc(CityMapping.Columns.MasterCity, CityMapping.Columns.ChildCity, CityMappingTourType.Columns.TourTypeCode)
                .ExecuteReader();
IDataReader reader=新的亚音速。选择(CityMapping.MasterCityColumn、CityMapping.ChildCityColumn、CityMappingTourType.TourTypeCodeColumn)
.From()
.InnerJoin(CityMappingTourType.CityMappingGidColumn、CityMapping.IdColumn)
.OrderAsc(CityMapping.Columns.MasterCity、CityMapping.Columns.ChildCity、CityMappingTourType.Columns.TourTypeCode)
.ExecuteReader();

因此,这个问题的解决方案相当烦人,但它确实有效。您的代码具有如下join语句:

.From(PastAwardName.Schema)
.InnerJoin(PastAwardName.VolIDColumn, PastAwardType.VolIDColumn)
如果更改InnerJoin语句中的表顺序,使from语句中的表是第二个而不是第一个,则它将起作用

.From(PastAwardName.Schema)
.InnerJoin(PastAwardType.VolIDColumn, PastAwardName.VolIDColumn)

非常恼人的行为…

第二个表在哪里/如何定义?从错误中可以看出,它试图将同一个表连接到自身。PastAwardName是第一个表-PastAwardType是第二个表。我正在尝试连接volID列。这很好,但只使用一个表。不确定如何添加联接?GridView1.DataSource=新查询(CMS.PastAwardName.Schema)。其中(PastAwardName.Columns.LName,this.LName.Text)。ExecuteReader();有两个表:PastAwardName,PastAwardType PastAwardName:volID,fName,lName,district PastAwardType:volID,awardName,awardYear,AwardTypes正如链接提供的那样,为什么不先创建一个集合,然后绑定它。我查看了链接,但不确定如何执行此操作?版本2.1。我不熟悉亚音速,不知道你的意思。
.From(PastAwardName.Schema)
.InnerJoin(PastAwardType.VolIDColumn, PastAwardName.VolIDColumn)