Столбец с одинаковым именем в нескольких таблицах, вызывающий проблему в SubSonic Select - PullRequest
1 голос
/ 30 июня 2009

есть другой вопрос (по крайней мере, 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%");

Я также пытался передать жестко запрограммированную строку, но ничего не работает!

Ответы [ 3 ]

4 голосов
/ 30 июня 2009

Если вы передадите объект столбца оператору Where, SubSonic будет использовать его полностью определенное имя вместо построения строки. Вы можете найти столбец объекта как статическое свойство, поэтому в этом случае, если у вас есть объект с именем «TableOne», вы можете использовать «TableOne.NameColumn» и передать его в Where ():

...
sq.Where(TableTwo.NameColumn).Like("A%");
1 голос
/ 30 июня 2009

Работает ли следующий запрос, я предполагаю, что вы используете 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%");
0 голосов
/ 30 июня 2009

Я никогда не использовал его,

но вы пытались изменить свою последнюю строку на:

sq.WhereExpression(Tables.TableTwo + "." + TableTwo.Columns.Name + " LIKE 'A%');
...