C# 多个表中同名的列导致亚音速选择出现问题
还有其他类似的问题(至少有两个我见过),但我无法用它们来解决这个问题 现在的问题是:我有3个表,我只需要从中选择4列。我正在使用InnerJoin,它工作得非常好。当我向该选择添加一个Where时,问题开始出现。我在两个表中有一个名为“Name”的列。如果我简单地加上C# 多个表中同名的列导致亚音速选择出现问题,c#,database,subsonic,sql,subsonic-select,C#,Database,Subsonic,Sql,Subsonic Select,还有其他类似的问题(至少有两个我见过),但我无法用它们来解决这个问题 现在的问题是:我有3个表,我只需要从中选择4列。我正在使用InnerJoin,它工作得非常好。当我向该选择添加一个Where时,问题开始出现。我在两个表中有一个名为“Name”的列。如果我简单地加上 .Where("Name").Like("A%") 上面写着“…模棱两可的列名…” 若我使用完全限定的列名(在列名前面加上table前缀),它会说必须声明参数@table\u name SqlQuery sq = new S
.Where("Name").Like("A%")
上面写着“…模棱两可的列名…”
若我使用完全限定的列名(在列名前面加上table前缀),它会说必须声明参数@table\u name
SqlQuery sq = new Select(Tables.TableOne + "." + TableOne.Columns.MemberId +
" AS MemberId",
Tables.TableTwo + "." + TableTwo.Columns.Name + " AS MemberName",
Tables.TableOne + "." + TableOne.Columns.ExpiryOn + " AS MembershipExpiresOn",
Tables.TableFour + "." + TableFour.Columns.Name + " AS Country")
.From(DAL.Tables.TableOne)
.InnerJoin(Tables.TableTwo)
.InnerJoin(Tables.TableThree)
.InnerJoin(Tables.TableFour, TableFour.Columns.CountryCode,
Tables.TableThree, TableThree.Columns.CountryOfBirth).
sq.Where(Tables.TableTwo + "." + TableTwo.Columns.Name).Like("A%");
我也尝试过传递硬编码字符串,但没有任何效果 我从来没用过它 但您是否尝试将最后一行更改为:
sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%');
我从来没用过 但您是否尝试将最后一行更改为:
sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%');
我假设您使用的是2.2,以下查询是否有效:
SqlQuery sq = new Select(TableOne.Columns.MemberId + " AS MemberId",
TableTwo.Columns.Name + " AS MemberName",
TableOne.Columns.ExpiryOn + " AS MembershipExpiresOn",
TableFour.Columns.Name + " AS Country")
.From(TableOne.Schema)
.InnerJoin(TableTwo.Schema)
.InnerJoin(TableThree.Schema)
.InnerJoin(TableFour.Schema)
.Where(TableTwo.Columns.Name).Like("A%");
我假设您使用的是2.2,以下查询是否有效:
SqlQuery sq = new Select(TableOne.Columns.MemberId + " AS MemberId",
TableTwo.Columns.Name + " AS MemberName",
TableOne.Columns.ExpiryOn + " AS MembershipExpiresOn",
TableFour.Columns.Name + " AS Country")
.From(TableOne.Schema)
.InnerJoin(TableTwo.Schema)
.InnerJoin(TableThree.Schema)
.InnerJoin(TableFour.Schema)
.Where(TableTwo.Columns.Name).Like("A%");
如果将column对象传递给Where语句,SubSonic将使用它的完全限定名,而不是构建字符串。您可以在对象上找到作为静态属性的列,因此在本例中,如果您有一个名为“TableOne”的对象,则可以使用“TableOne.NameColumn”并将其传递到Where():
如果将column对象传递给Where语句,SubSonic将使用它的完全限定名,而不是构建字符串。您可以在对象上找到作为静态属性的列,因此在本例中,如果您有一个名为“TableOne”的对象,则可以使用“TableOne.NameColumn”并将其传递到Where():
其中Expression用于组合多个条件,在这种情况下不会有任何效果。其中Expression用于组合多个条件,在这种情况下不会有任何效果。是的,正如Rob Connery在本网站上发布的,第二件事应该与亚音速2.2一起工作,但它不起作用。使用列别名也不起作用,这是错误的strange@Adam:.Where(“MemberName”)。比如(“A%”可能不起作用,因为SQL Selects不能在Where子句中使用别名。这在sql中不起作用:“选择sum*quantity作为结果,其中结果>5”。你必须写“选择总和*数量作为结果,结果>5”或“选择总和*数量作为结果,其中总和*数量>5”。@Schlaviener:谢谢,直到sql提醒我之前,我总是忘记这一点。是的,正如Rob Connery在本网站上发布的一样,第二件事应该适用于亚音速2.2,但它不起作用。使用列别名也不起作用,这是错误的strange@Adam:.Where(“MemberName”)。比如(“A%”可能不起作用,因为SQL Selects不能在Where子句中使用别名。这在sql中不起作用:“选择sum*quantity作为结果,其中结果>5”。你必须写“选择总和*数量作为结果,结果>5”或“选择总和*数量作为结果,其中总和*数量>5”。@Schlaviener:谢谢,我总是忘记,直到sql提醒我。谢谢你的回答。首先,它不是TableTwo.NameColumn,而是TableTwo.Columns.NameColumn。其次,当我传递sq.Where(TableTwo.NameColumn)时,它在生成的SQL脚本中使用TableFour.Name。它正在工作,但错误:([我已移动到亚音速2.2]感谢回答Rob。首先,它不是TableTwo.NameColumn,而是TableTwo.Columns.NameColumn。其次,当我通过sq.Where(TableTwo.NameColumn)时,它在生成的SQL脚本中使用TableFour.Name。它正在工作,但错误:([我已移动到亚音速2.2]