Запрос с использованием Dapper в C# & MySQL - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в C# и создаю небольшое программное обеспечение для практики.

Я создал запрос, чтобы получить последний номер Dispatch_ID (который не является автоматическим приращением). Код, который я использую, выглядит примерно так:

public string GetLastDispatchNum()
    {
        using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB")))
        {
            var output=connection.Query("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").Select(x=>x.Dispatch_ID).ElementAt(0);
            return output;
        }
    }

Хотя это и делает мою работу, я чувствую, что здесь не правильно использую dapper, и это может быть намного лучше. Запрос «SELECT Dispatch_ID FROM DispatchData ORDER BY Dispatch_ID DES C LIMIT 1» сам по себе возвращает только одно значение и один столбец. Поэтому использование .Select (x => x.Dispatch_ID) & .ElementAt (0) кажется немного повторяющимся.

Есть ли лучший способ go об этом?

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

Чтобы обновить запрос Dapper, чтобы вам не приходилось использовать .ElementAt (0), вы можете просто написать код Dapper, например:

// Assuming that Dispatch_ID is an int
var output = connection.QueryFirst<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1");

Также, если вы хотите использовать обобщенный c в функциях Dapper Я бы порекомендовал вам использовать что-то, совпадающее с тем, что вы извлекаете, поэтому я изменил его с <DispatchData> на <int>.

0 голосов
/ 15 апреля 2020

Я не знаю, добавляет ли это много по сравнению с другими ответами, но я предпочитаю QuerySingle в тех случаях, когда я ожидаю одно значение. Он выдает исключение, если в результирующем наборе нет точно одного элемента.

public int GetLastDispatchNum()
{
    using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("FineCreteDB")))
    {
        int output=connection.QuerySingle<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").Select(x=>x.Dispatch_ID).ElementAt(0);
        return output;
    }
}

Он обеспечивает две вещи:

  • Значение по умолчанию (может быть, ноль) не будет вызвать проблемы на более позднем этапе.
  • Несоответствие в моей базе данных или моей модели базы данных не останется go незамеченным.
0 голосов
/ 12 апреля 2020

Лично я бы использовал это вместо:

var output=connection.Query<int>("SELECT `Dispatch_ID` FROM `DispatchData` ORDER BY `Dispatch_ID` DESC LIMIT 1").FirstOrDefault();

Не могу сказать, что это технически лучше / быстрее, но мне кажется чище.

...