从存储过程中获取数据时如何避免重复?

时间:2016-04-20 12:39:58

标签: c# sql entity-framework

我从存储过程中获取一个列表及其子日期,我想避免在将项目添加到列表时重复

这是我的代码:

var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[T]";

db.Database.Connection.Open();
var reader1 = cmd.ExecuteReader();

var objectContext1 = ((IObjectContextAdapter)db).ObjectContext;
var usersLi = objectContext1.Translate<GetAllNewsForUser>(reader1).ToList();

List<GetAllNewsForUser> lll = new List<GetAllNewsForUser>();

foreach (var item in usersLi)
{
    NewsInfo newsInfo = new NewsInfo();

    GetAllNewsForUser g = new GetAllNewsForUser();
    g.UserName = item.UserName;

    NewsInfo nnn = new NewsInfo();
    nnn.NewsTitle = item.NewsTitle;
    nnn.NewsId = item.NewsId;

    g.NewsInfos.Add(nnn);
    lll.Add(g);
}

2 个答案:

答案 0 :(得分:1)

是否有g的唯一标识符,例如用户ID。在这种情况下,您可以轻松使用以下内容:

if (!lll.Any(x=>x.UserId ==g.UserId)) //include system.linq
{
    lll.Add(g);
}

您还可以查看修改存储过程以不返回重复项。

编辑---- 关于你真正追求的是什么,抱歉......

这只是草稿,但我认为这就是你所需要的。

 List<GetAllNewsForUser> lll = new List<GetAllNewsForUser>();
 foreach (var item in usersLi)
 {
     NewsInfo nnn = new NewsInfo();
     nnn.NewsTitle = item.NewsTitle;
     nnn.NewsId = item.NewsId;

     if (!lll.Any(x=> x.UserName == item.UserName)
     { 

          GetAllNewsForUser g = new GetAllNewsForUser();
          g.UserName = item.UserName;
          g.NewsInfos.Add(nnn);
          lll.Add(g);

     }
     else
     {
          lll.Where(x=>x.UserName == item.Username).FirstOrDefault().NewsInfos.Add(nnn)

     }        


 }

答案 1 :(得分:0)

据我所知,到目前为止,您试图避免在列表中添加相同的行(基于某些列的值)。 LINQ可能会对此有所帮助。

usersLi.GroupBy(e => new { 
                      UserID = e.UserUD 
                   }).Select(g => g.First());