Возврат всех результатов поиска из базы данных SQL с 1 поиском - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь создать небольшое «приложение», которое использует флажки в качестве метода поиска.Он работает нормально, когда отмечен только 1 флажок, но когда я проверяю более одного флажка, он показывает результат только из последнего установленного флажка.Я пытался отладить его, и я вижу, что источник данных перезаписывается при каждом столкновении.Кто-нибудь, кто может помочь с входом о том, как «хранить» данные и не обновлять их при каждом утверждении «если»?

C #

private void UpdateBinding()
{
  wodListBox.DataSource = null;
  wodListBox.DataSource = Exercise;
  wodListBox.DisplayMember = "ExerciseID";
}

private void Checkboxes()
{
    DataAccess db = new DataAccess();

    if (BarBellCheckBox.Checked)
    {
        Exercise = db.GetExercise(BarBellCheckBox.Text);
    }
    if (WallBallCheckBox.Checked)
    {
        Exercise = db.GetExercise(WallBallCheckBox.Text);
    }
    if (KettleBellCheckBox.Checked)
    {
        Exercise = db.GetExercise(KettleBellCheckBox.Text);
    }
    if (BarCheckBox.Checked)
    {
        Exercise = db.GetExercise(BarCheckBox.Text);
    }

    UpdateBinding();
}

public class DataAccess
{
    public List<ExerciseModel> GetExercise(string ExerciseEquipment)
    {

        using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.CnnVal("WodDB")))
        {

            return connection.Query<ExerciseModel>("dbo.GetEquipmentType @ExerciseEquipment", new { ExerciseEquipment = ExerciseEquipment }).ToList();

        }
    }
}

T SQL

CREATE PROCEDURE [dbo].[GetEquipmentType]
@ExerciseEquipment nvarchar(50)

AS
BEGIN
    SELECT ExerciseName, ExerciseEquipment
    FROM dbo.ExerciseName
    INNER JOIN dbo.ExerciseEquipment
    ON dbo.ExerciseName.ExerciseID = dbo.ExerciseEquipment.ExerciseID
    WHERE ExerciseEquipment = @ExerciseEquipment
END

1 Ответ

0 голосов
/ 13 июня 2018

Быстро: вы переопределяете результаты в каждом if -блоке.


Так как это исправить?

Со времени вашего "Упражнения"имеет тип List<ExerciseModel>, который вы могли бы инициализировать до ваших if операторов, таких как:

Exercise = new List<ExerciseModel>();

и позже в вашем блоке if просто используйте AddRange()

Exercise.AddRange( db.GetExercise(BarBellCheckBox.Text) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...