还有其他问题(至少有2个我见过它们)与此类似,但我无法用它们来解决这个问题。
现在问题:我有3个表,我只需从中选择4列。我正在使用InnerJoin并且它工作得很好。当我添加Where to this Select时,问题就开始了。我在两个表中有一个名为“Name”的列。如果我只添加
.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%");
我也试过传递硬编码的字符串,但没有任何作用!
答案 0 :(得分:4)
如果将列对象传入Where语句,SubSonic将使用它的完全限定名称而不是构建字符串。您可以在对象上找到该列作为静态属性,因此在这种情况下,如果您有一个名为“TableOne”的对象,则可以使用“TableOne.NameColumn”并将其传递到Where():
...
sq.Where(TableTwo.NameColumn).Like("A%");
答案 1 :(得分: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%");
答案 2 :(得分:0)
我从未使用过它,
但是您尝试将最后一行更改为:
sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%');