[英]How to get parent and child table date from Stored Procedure in Entity Framework
我在实体框架中使用存储过程。 我很容易通过@id参数获取父值及其子级,但是这次我想获取父表对象和每个父级对象的子级的列表
喜欢这张照片
var command = myContext.Database.Connection.CreateCommand();
command.CommandText = "[dbo].[GetNewsForUser] @id";
command.Parameters.Add(new SqlParameter("@id", "9f13f132-4536-4111-a73e-61a97a52d226"));
try
{
myContext.Database.Connection.Open();
var reader = command.ExecuteReader();
var objectContext = ((IObjectContextAdapter)myContext).ObjectContext;
UserNews.UserName = objectContext.Translate<string>(reader).FirstOrDefault();
// to get nex select set from Stored Procedure
reader.NextResult();
UserNews.NewsInfos = objectContext.Translate<NewsInfo>(reader).ToList();
}
finally
{
myContext.Database.Connection.Close();
}
}
CREATE Procedure GetNewsForUser
@id nvarchar(50)
as
BEGIN
select UserName from AspNetUsers where id= @id
select NewsId, NewsTitle from News where UserId = @id
End
请帮助我修改我的C#代码和t-sql以实现父表对象和每个父对象的子对象的LIST
我想用数据填充这些
IList<GetAllNewsForUser> li = null;
GetAllNewsForUser g = new GetAllNewsForUser();
g.UserName = "";
g.NewsInfos = null;
li.Add(g);
谢谢
您需要的是AspNetUsers表和News表之间的联接查询。 然后,您需要订购套装。 在C#代码中,将集合放入列表后,可以将其绑定到按用户名分组的网格,或者为简单起见,您可以遍历该集合以填充正在使用的表示对象。 查看以下代码:
SELECT UserName, NewsId, NewsTitle
FROM AspNetUsers u JOIN News n
ON u.Id = n.UserId
Order by UserName, NewsTitle
每当用户名不同时,循环遍历上面的列表更改组
var userNewsList = repository.GetAllUserNews();
foreach(var item in userNewsList)
{
if(userName != item.UserName)
{
//print the userName only once
}
//print the NewsTitle and NewsId
}
如果您没有实体,则可能需要创建一个与查询结果集匹配的新实体。 假设实体名称为UserNews。 然后跟随
var resultSet = objectContext.Translate<UserNews>(reader);
Translate方法返回一个ObjectResult,然后您可以使用以下示例中的代码循环遍历该集(resultSet): https : //msdn.microsoft.com/zh-cn/library/bb738847(v= vs.110).aspx
您可以使用字典以所需的方式加载数据。
usersLi = objectContext.Translate(reader).ToList(); var newsContainer =新的Dictionary()
foreach (var item in usersLi)
{
if( !newsContainer.ContainsKey( item.Username))
{
newsContainer.Add(item.UserName, new List<NewsInfo>());
}
var newsInfo = new NewsInfo();
newsInfo.NewsTitle = item.Title;
newsInfo.NewsId = item.Id;
newsContainer[item.UserName].Add(newsInfo);
}
newsContainer.Keys为您提供用户名,newsContainer [username]为您提供NewsInfo的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.