Дозвуковая помощь, как перечислить только первую запись - PullRequest
0 голосов
/ 27 августа 2010

Привет, я делаю небольшой отчет, используя subsonic. Я довольно нуб. И я не могу понять, как перечислить только первую запись в своем отчете. Я делаю что-то вроде:

new Select("id,Name,place,group").From(User.Schema)
                                 .InnerJoin(Profile.Schema)
                                 .InnerJoin(userGroup.Schema)
                                 .Where("place")
                                 .IsEqualTo("insomeplace")
                                 .ExecuteReader();

    result:
    093007 Joe doe insomeplace S2A
    093007 Joe doe insomeplace S2A
    093007 Joe doe insomeplace S2A
    093007 Joe doe insomeplace S2A

Я пытаюсь создать новый Select ("бла бла"). Distinct () новый Select ("бла бла"). Top ("1"), но ни один из них не работает ... так что я могу сделать? ?? есть идеи???

При использовании Top («1») я получил сообщение «У вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса для руководства, соответствующего вашей версии сервера MySQL, около '1 user. id, user. Name, Место, Место ОТ user 'в строке 1 "

Я использую дозвуковую 2.x

заранее спасибо

Ответы [ 4 ]

1 голос
/ 01 сентября 2010

Я предполагаю из ссылки на ваш вопрос, что вы используете MySql. Боюсь, что я мало что знаю о MySql, но может пригодиться следующее:

  1. Я могу заверить вас, что .Top ("1") определенно работает в SubSonic 2.x против SQL Server.
  2. Можете ли вы найти эквивалент SQL Server Profiler для MySql, чтобы увидеть, какой код SQL отправляется в базу данных?
  3. TOP 1 не является допустимым SQL в MySql, вместо этого вам нужно использовать предложение LIMIT - http://dev.mysql.com/doc/refman/5.0/en/select.html
0 голосов
/ 24 сентября 2010

Другой способ сделать это - использовать .ExecuteSingle(), который будет возвращать только первый результат. Недостатком этого является то, что база данных фактически возвращает все строки запроса (SubSonic просто отбрасывает все, кроме первой записи).

0 голосов
/ 01 сентября 2010

Вы можете использовать метод Paged (...):

new Select("id,Name,place,group").From(User.Schema)
                                 .InnerJoin(Profile.Schema)
                                 .InnerJoin(userGroup.Schema)
                                 .Where("place")
                                 .Paged(1, 1)
                                 .IsEqualTo("insomeplace")
                                 .ExecuteReader();

Я не уверен на 100%, если вам нужно использовать Paged(1,1) или Paged(0,1), попробуйте оба.

0 голосов
/ 27 августа 2010

бросить курить !!!!Я предложил использовать

string sqlString = "Select * ...";
new InlineQuery().ExecuteReader(sqlString);
...