DAKSH
DAKSH

Reputation: 1

How can I avoid duplicate code in the long if-else chain?

I am using web api 2 with entity frame work. On one condition I would like to know how I can reduce if/else for the same code. I tried so hard but I do not get any result. I am using lambada expression.

   //  ALL Value Is Given By User

        if (FightTypeId != 0 && Title != null && Date != null)
        {
            var getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId && e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()) && e.Date == Date);

            //this illustrates that user can  give title in any case  and title can be in  2-3 latter of title is enough for  get output

            var res = from e in getTblEvent
                      select new
                      {
                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,


                      };
            return Ok(res);


        }

         //Only FightTypeID Is Given By User

        else if (FightTypeId != 0 && Title == null && Date == null)
        {

            var getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId);
            var res = from e in getTblEvent
                      select new
                      {


                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,


                      };
            return Ok(res);
        }

          //TITLE Is Given By User


        else if (FightTypeId == 0 && Title != null && Date == null)
        {

            var getTblEvent = db.tblEvents.Where(e => e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()));
            var res = from e in getTblEvent
                      select new
                      {

                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,

                      };
            return Ok(res);
        }

       // Only DATE Is Given By User

        else if (FightTypeId == 0 && Title == null && Date != null)
        {

            var getTblEvent = db.tblEvents.Where(e => e.Date == Date);
            var res = from e in getTblEvent
                      select new
                      {

                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,


                      };
            return Ok(res);
        }

        //FIGHTTYPEID And TITLE Is Given By User


        else if (FightTypeId != 0 && Title != null && Date == null)
        {

            var getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId && e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()));
            var res = from e in getTblEvent
                      select new
                      {


                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,

                      };
            return Ok(res);
        }


         // Only DATE And TITLE Is Given By User

        else if (FightTypeId == 0 && Title != null && Date != null)
        {

            var getTblEvent = db.tblEvents.Where(e=>e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()) && e.Date==Date);
            var res = from e in getTblEvent
                      select new
                      {

                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,

                      };
            return Ok(res);
        }



        //FightTypeID And Date Is Given By User

        else if (FightTypeId != 0 && Title == null && Date != null)
        {

            var getTblEvent = db.tblEvents.Where(e => e.FightTypeId==FightTypeId && e.Date==Date);
            var res = from e in getTblEvent
                      select new
                      {


                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,


                      };
            return Ok(res);
        }

            // by defaultly  shows all Details to user
        else
        {

            var res = from e in db.tblEvents
                      select new
                      {

                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,


                      };
            return Ok(res);
        }

    }

Upvotes: 0

Views: 71

Answers (2)

BurningLights
BurningLights

Reputation: 2397

You could streamline it like this:

   // by defaultly  shows all Details to user
   var getTblEvent = db.tblEvents;
   //  ALL Value Is Given By User

        if (FightTypeId != 0 && Title != null && Date != null)
        {
            getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId && e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()) && e.Date == Date);
        }


         //Only FightTypeID Is Given By User

        else if (FightTypeId != 0 && Title == null && Date == null)
        {

            getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId);
        }

          //TITLE Is Given By User


        else if (FightTypeId == 0 && Title != null && Date == null)
        {

           getTblEvent = db.tblEvents.Where(e => e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()));

        }

       // Only DATE Is Given By User

        else if (FightTypeId == 0 && Title == null && Date != null)
        {

           getTblEvent = db.tblEvents.Where(e => e.Date == Date);
        }

        //FIGHTTYPEID And TITLE Is Given By User


        else if (FightTypeId != 0 && Title != null && Date == null)
        {

           getTblEvent = db.tblEvents.Where(e => e.FightTypeId == FightTypeId && e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()));

        }


         // Only DATE And TITLE Is Given By User

        else if (FightTypeId == 0 && Title != null && Date != null)
        {

           getTblEvent = db.tblEvents.Where(e=>e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()) && e.Date==Date);

        }



        //FightTypeID And Date Is Given By User

        else if (FightTypeId != 0 && Title == null && Date != null)
        {

           getTblEvent = db.tblEvents.Where(e => e.FightTypeId==FightTypeId && e.Date==Date);

        }


        var res = from e in getTblEvent
                  select new
                  {

                      EventID = e.EventID,
                      FightTypeId = e.FightTypeId,
                      Title = e.Title,
                      Date = e.Date,
                      Location = e.Location,
                      UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                      Price = e.Price,
                      UserPredictionFlag = e.UserPredictionFlag,
                      PredictionStartDate = e.PredictionStartDate,
                      PredictionEndDate = e.PredictionEndDate,
                      ModifiedUserId = e.ModifiedUserId,
                      LastUserModifiedDate = e.LastUserModified,


                  };
        return Ok(res);

Upvotes: 0

Dave Zych
Dave Zych

Reputation: 21887

It looks like you're just checking the existence of each parameter, and if they aren't null (or 0) you filter by it. You can check each param once and chain Where calls to accomplish what you want:

var query = db.tblEvents;

if(FightTypeId != 0)
{
    query = query.Where(e => e.FightTypeId == FightTypeId);
}

if(Title != null)
{
    query = query.Where(e => e.Title.ToUpper().Trim().Contains(Title.ToUpper().Trim()));
}

if(Date != null)
{
    query = query.Where(e => e.Date == Date);
}

var res = query.Select(e =>
                      new
                      {
                          EventID = e.EventID,
                          FightTypeId = e.FightTypeId,
                          Title = e.Title,
                          Date = e.Date,
                          Location = e.Location,
                          UserSelectFavoriteFlag = e.UserSelectFavoriteFlag,
                          Price = e.Price,
                          UserPredictionFlag = e.UserPredictionFlag,
                          PredictionStartDate = e.PredictionStartDate,
                          PredictionEndDate = e.PredictionEndDate,
                          ModifiedUserId = e.ModifiedUserId,
                          LastUserModifiedDate = e.LastUserModified,
                      };

return Ok(res);

Upvotes: 1

Related Questions