My Connection String:
<add name="addConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\FLWorkDB.mdf" providerName="System.Data.SqlClient" />
<add name="FLWorkDBEntities" connectionString="metadata=res://*/MyEdmx.csdl|res://*/MyEdmx.ssdl|res://*/MyEdmx.msl;provider=System.Data.SqlClient;provider connection string="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\FLWorkDB.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
My Web API:
[HttpGet]
[Route("api/JobApi/BrowseJobs/")]
public object BrowseJobs()
{
using (var ctx = new FLWorkDBEntities())
{
//Get student name of string type
object studentName = ctx.Database.SqlQuery<string>(@"Select j.JobID,j.JobDetails,j.JobTitle, j.Deadline ,j.Budget,j.Category, emp.FirstName,emp.LastName,Skills = Stuff((Select ',' +SkillName From Skill Where charindex(concat(',',SkillID,','),','+j.ReqSkill+',')>0 For XML Path ('')),1,1,'')
From Job j
join Employeer emp on j.EmployeerID = emp.EmployeerID
WHERE NOT EXISTS
(SELECT *
FROM ClosedJob c
WHERE c.JobID = j.JobID) AND
NOT EXISTS
(SELECT *
FROM AppliedJob apj
join JobOffer jo on apj.AppliedJobID =jo.AppliedJobID
join Contract con on jo.OfferID =con.OfferID
WHERE con.CompletedDate != Null)").ToList();
}
return stu;
}
Now i am doing all with LINQ. But i want to avoid LINQ and add direct sql query.
RAW Sql: "Select * from A where A.ID =2"
(with join)
I want to add the RAW SQL Query in my web api that returns list in json. Can i add sql query without entity framework, i mean .edmx file?
Edited============== Tried this:
var results = db.Database.SqlQuery<FLWorkDBEntities>(@"Select j.JobID,j.JobDetails,j.JobTitle, j.Deadline ,j.Budget,j.Category, emp.FirstName,emp.LastName,Skills = Stuff((Select ',' +SkillName
From Skill
Where charindex(concat(',',SkillID,','),','+j.ReqSkill+',')>0
For XML Path ('')),1,1,'')
From Job j
join Employeer emp on j.EmployeerID = emp.EmployeerID
WHERE NOT EXISTS
(SELECT *
FROM ClosedJob c
WHERE c.JobID = j.JobID) AND
NOT EXISTS
(SELECT *
FROM AppliedJob apj
join JobOffer jo on apj.AppliedJobID =jo.AppliedJobID
join Contract con on jo.OfferID =con.OfferID
WHERE con.CompletedDate != Null)").ToList<FLWorkDBEntities>();
return JsonConvert.SerializeObject(results);
But returns:
Self referencing loop detected with type 'System.Data.Entity.DynamicProxie
================Solved====================
I made a stored procedure (BrowseJobs
) then attached it with the following code
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["addConnection"].ConnectionString);
SqlCommand com = new SqlCommand("BrowseJobs", con);
com.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(com);
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];