需要获取过滤TextValuePair数组

时间:2014-09-18 08:07:15

标签: c#

我有两个列表,每个列表包含一些相同的字段数据,我想在retrun一个TextValuePair数组中删除重复的项目。但问题是如果用户不止一个,它会在foreach中删除最后一个并在用户中重新执行其他操作。

这是我的代码



      public TextValuePair[] FindAllUserByNotThisId(int id)
        {
            TextValuePair[] users=null;
            var userids = _uow.UserInGroups.GetAll().Where(x => x.GroupId ==  id).ToList().Select(s=>s.UserId);
            foreach (var userid in userids)
            {
               users=  _uow.Users.GetAll().Where(x => x.UserId != userid).ToList()
                       .Select(
                           s =>
                           new TextValuePair
                           {
                               Text = s.UserName,
                               Value = s.UserId.ToString()
                           })
                       .ToArray();
            }
            return users;
        }

如果用户数为3则删除每个重复的ID,但最后只删除3个ID,其他两个将在用户最终结果中显示如下: -

用户ID

userid
1
2
3

用户

userid username
1        a
2        b
3        c
4        d

它还返回我前两个

userid username
1       a
2       b
4       d

但我只想

userid username
4       d

请帮助..

1 个答案:

答案 0 :(得分:1)

好吧,我认为你的问题是foreach和覆盖users集合。试试这个:

public TextValuePair[] FindAllUserByNotThisId(int id)
        {
            TextValuePair[] users=null;
            var userids = _uow.UserInGroups.GetAll().Where(x => x.GroupId ==  id).ToList().Select(s=>s.UserId);

               users=  _uow.Users.GetAll().Where(x => !userids.Contains(x.UserId)).ToList()
                       .Select(
                           s =>
                           new TextValuePair
                           {
                               Text = s.UserName,
                               Value = s.UserId.ToString()
                           })
                       .ToArray();
            return users;
        }

如果没有foreach循环并覆盖users集合,我们现在知道在where过滤器之后不会修改users集合。 使用包含,我们可以在不使用循环的情况下评估整个usersid