Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个表中同名的列导致亚音速选择出现问题_C#_Database_Subsonic_Sql_Subsonic Select - Fatal编程技术网

C# 多个表中同名的列导致亚音速选择出现问题

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

还有其他类似的问题(至少有两个我见过),但我无法用它们来解决这个问题

现在的问题是:我有3个表,我只需要从中选择4列。我正在使用InnerJoin,它工作得非常好。当我向该选择添加一个Where时,问题开始出现。我在两个表中有一个名为“Name”的列。如果我简单地加上

.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]