user2117713
user2117713

Reputation: 97

C# MVC API URL string value remove case sensitive

I have C# MVC API URL localhost/api/APIValues?Name=Nick. All working but only issue is when I typed Name=nick it won't display result. because my database table name field store Nick. Also my Database table name field has some data example Nick, ANN, tristan, Abbott,BUD. How do I remove string(Name) case sensitive MVC API values? Example, how do I setup both way work localhost/api/APIValues?Name=Nick and localhost/api/APIValues?Name=nick.

This is my C# code.

public IEnumerable<NameDTO> Get(string Name = "")
{
var nameList = (from o in db.People.AsEnumerable()
                       where  o.name == Name                       
                       join s in db.Employee on
                        o.empID equals s.empID
                     
                        select new 
                        {
                            
                           s.empID,
                            o.Id
                        }).ToList();
}

My finally out put should work both name "Nick or nick"

localhost/api/APIValues?Name=Nick
localhost/api/APIValues?Name=nick

Upvotes: 1

Views: 473

Answers (4)

Harvinder Singh
Harvinder Singh

Reputation: 34

Try this, I think it may help you:

    // Use if you want same records  with name you provide

    public List<NameDTO> Get(string Name = "")
    {
        var nameList = (from o in db.People.AsEnumerable()
                        where o.name.Trim().ToLower() == Name.Trim().ToLower()
                        join s in db.Employee on
                         o.empID equals s.empID

                        select new NameDTO()
                        {
                          EmpId =  s.empID,
                           Id = o.Id
                        }).ToList();
    }

    //use this if you want similar records from database

    public IEnumerable<NameDTO> Get(string Name = "")
    {
        var nameList = (from o in db.People.AsEnumerable()
                        where o.name.Trim().ToLower().Contains(Name.Trim().ToLower())
                        join s in db.Employee on
                         o.empID equals s.empID
                       select new NameDTO()
                        {
                          EmpId =  s.empID,
                           Id = o.Id
                        }).ToList();
    }

}

Upvotes: 0

smoksnes
smoksnes

Reputation: 10851

SQL is not case sensitive. And as long as yo're using a library that converts your code to SQL (such as EF) this shouldn't be an issue.

var nameList = (from o in db.People
                       where  o.name == Name                       
                       join s in db.Employee on
                        o.empID equals s.empID
                        select new 
                        {                            
                           s.empID,
                            o.Id
                        }).ToList();

The problem is that you're using AsEnumerable() which actually executes the query and then compares the objects in memory instead of comparing in DB. Watch it in the SQL Profiler and you will see the difference.

Upvotes: 0

Hasta Tamang
Hasta Tamang

Reputation: 2263

Made it as simple as it can get. Whenever my query's don't work in a single line it's my preference to break it down into several components. Feel happy to write a one liner though.

var nameList= db.People.AsEnumerable();
            People people = new People();
            foreach (var x in nameList)
            {
                var result = x.name.ToLower() == Name.ToLower();
                if (result)
                {
                    people = x;
                }
            }

var Employee =  db.Employee.FirstOrDefault(e => e.EmpId == people.EmpId);

NameDTO nameDTO = new NameDTO()
{
 EmpId = Employee.EmpId,
 Id = People.Id
};

Upvotes: 0

Bruno Garcia
Bruno Garcia

Reputation: 6408

You can use Equals with StringComparison:

public IEnumerable<NameDTO> Get(string Name = "")
{
var nameList = (from o in db.People.AsEnumerable()
                       where o.name.Equals(Name, StringComparison.OrdinalIgnoreCase)      
                       join s in db.Employee on
                        o.empID equals s.empID

                        select new 
                        {

                           s.empID,
                            o.Id
                        }).ToList();
}    

Upvotes: 1

Related Questions