我目前有一个正在处理的项目,该项目有一个连接到它的数据库。在上述数据库中,我需要查询一些没有关系的表。我需要获取一组特定的数据,以便在我的用户界面上显示它。但是,我需要能够引用返回的数据,将其放入列表并将其转换为json。我有一个只需要对上下文执行的存储过程,因为它从许多不同的表中检索数据。
我尝试过使用ExecuteSqlCommand,但这不起作用,因为它返回-1,并且不能将其放入列表中。
我尝试过使用linq来选择我想要的列,但是它真的很混乱,而且我不能轻松地检索数据。
我尝试过使用FromSql,但是它需要一个模型来根据上下文执行,而这正是我不想要的。
public string GetUserSessions(Guid memberId)
{
string sql = $"EXECUTE dbo.GetUserTrackByMemberID @p0";
var session = _context.Database.ExecuteSqlCommand(sql, memberId);
var json = JsonConvert.SerializeObject(session);
return json;
}这是ExecuteSqlCommand示例,它返回-1,并且不能放入列表中,因为将有多个会话。
public string GetUserSessions(Guid memberId)
{
var session = _context.MemberSession.Where(ms => ms.MemberId == memberId).Select(s => new Session() { SessionId =
s.SessionId, EventId = s.Session.EventId, CarCategory = s.Session.CarCategory, AirTemp = s.Session.AirTemp,
TrackTemp = s.Session.TrackTemp, Weather = s.Session.Weather, NumberOfLaps = s.Session.NumberOfLaps, SessionLength = s.Session.SessionLength,
Event = new Event() { EventId = s.Session.Event.EventId, TrackId = s.Session.Event.TrackId, Name = s.Session.Event.Name, NumberOfSessions =
s.Session.Event.NumberOfSessions, DateStart = s.Session.Event.DateStart, DateFinish = s.Session.Event.DateFinish, TyreSet = s.Session.Event.TyreSet,
Track = new Track() { TrackId = s.Session.Event.Track.TrackId, Name = s.Session.Event.Track.Name, Location = s.Session.Event.Track.Location, TrackLength
= s.Session.Event.Track.TrackLength, NumberOfCorners = s.Session.Event.Track.NumberOfCorners} } });
var json = JsonConvert.SerializeObject(session);
return json;
}这是使用Linq,但是它真的很混乱,我觉得可能有更好的方法来做这件事,然后当从json中检索数据时,它会更痛苦。
public string GetUserSessions(Guid memberId)
{
var session = _context.MemberSession.FromSql($"EXECUTE dbo.GetUserSessionByMemberID {memberId}").ToList();
var json = JsonConvert.SerializeObject(session);
return json;
}这是我想要的最理想的方式,但是因为我使用的是MemberSession模型,所以它只会从MemberSession表中的存储过程中检索数据,但是我也想要其他表中的数据。
public string GetUserSessions(Guid memberId)
{
var session = _context.MemberSession.Where(ms => ms.MemberId == memberId).Include("Session").Include("Event").ToList();
var json = JsonConvert.SerializeObject(session);
return json;
}我尝试过这种方法,但是因为Event表没有对MemberSession的引用/关系,所以它返回一个错误。
正如我在前面的RawSql示例中所说的,我只获取MemberSession表中的表数据,而不获取其他表。
没有错误消息。
发布于 2019-09-10 13:35:29
using (var context = new DBEntities())
{
string query = $"Exec [dbo].[YOUR_SP]";
List<ResponseList> obj = context.Database.SqlQuery<ResponseList>(query).ToList();
string JSONString = JsonConvert.SerializeObject(obj);
}https://stackoverflow.com/questions/57864407
复制相似问题