繁体   English   中英

如何从实体框架中的存储过程中获取父表和子表的日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM