1

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

现在的问题是:我有 3 个表,我只需要从中选择 4 列。我正在使用 InnerJoin,它运行良好。当我向此选择添加位置时,问题就开始了。我在两个表中有一个名为“名称”的列。如果我简单地添加

.Where("Name").Like("A%")

它说“......列名不明确......”

如果我使用完全限定的列名(表前缀为列名)它说必须声明参数@TABLE_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%");

我也尝试过传递硬编码的字符串,但没有任何效果!

4

3 回答 3

4

如果您将列对象传递给 Where 语句,SubSonic 将使用它的完全限定名称而不是构建字符串。您可以在对象上找到作为静态属性的列,因此在这种情况下,如果您有一个名为“TableOne”的对象,您可以使用“TableOne.NameColumn”并将其传递给 Where():

...
sq.Where(TableTwo.NameColumn).Like("A%");
于 2009-06-30T19:21:24.420 回答
1

以下查询是否有效,我假设您使用的是 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%");
于 2009-06-30T08:42:39.367 回答
0

我从来没用过

但是您是否尝试将最后一行更改为:

sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%');
于 2009-06-30T07:25:52.220 回答