还有其他类似的问题(至少有两个我见过),但我不能用它们来解决这个问题。
现在的问题是:我有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/

10-17 02:45