user1938460
user1938460

Reputation: 75

Asp.net MVC 4 Database Query returning sql query.

I am trying to query my database to get a specific data from my database. however when I convert the query to string it doesn't return the select value, instead it returns the whole SQL Query in a string. I am stumped on why this is happening

public ActionResult StudiedModules()
    {
        Model1 studiedModules = new Model1();
        List<StudiedModulesModel> listModules = new List<StudiedModulesModel>();
            using (EntityOne context = new EnitityOne())
            {
                foreach(var module in context.StudiedModules){
                    studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).ToString();
                    studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).ToString();
                }
            }

            var data = listModules;

        return View(data);
    }

Upvotes: 0

Views: 2265

Answers (2)

Tim S
Tim S

Reputation: 2329

Calling ToString() on an Entity Framework Linq query like that will in fact return the SQL Query. So as it's written, your code is doing exactly what you wrote it to do.

If you want to select the first result from the IQueryable<T>, then you need to call First() before your ToString(). So, try changing

studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).ToString();

studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).ToString()

to

studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).First().ToString();

studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).First().ToString()

There are a whole lot more methods available depending on what you're trying to accomplish. If you want to get a list, use ToList(), or as Uroš Goljat pointed out, you can get a comma-separated list of values using the Aggregate( (a, b)=> a + ", " + b) method.

Upvotes: 1

Uroš Goljat
Uroš Goljat

Reputation: 1816

How about using Aggregate( (a, b)=> a + ", " + b) instead of ToString().

Regards, Uros

Upvotes: 0

Related Questions