还有其他类似的问题(至少有两个我见过),但我不能用它们来解决这个问题。
现在的问题是:我有3个表,我只需要从中选择4列。我正在使用innerjoin,它工作得很好。当我向这个选择添加一个位置时,问题就开始了。我在两个表中有一个名为“name”的列。如果我简单地加上
.Where("Name").Like("A%")
上面写着“……不明确的列名..“
如果我使用完全限定的列名(表的前缀是列名),它会说必须声明参数@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%");
我也试过传递硬编码字符串,但没有任何工作!
最佳答案
如果将column对象传递给where语句,subsonic将使用它的完全限定名,而不是生成字符串。可以将对象上的列作为静态属性找到,因此在本例中,如果有一个名为“tableOne”的对象,则可以使用“tableOne.nameColumn”并将其传递到where()中:
...
sq.Where(TableTwo.NameColumn).Like("A%");
关于c# - 多个表中具有相同名称的列导致SubSonic Select中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1061851/