C# 需要获取筛选器TextValuePair数组

C# 需要获取筛选器TextValuePair数组,c#,C#,我有两个列表,每个列表包含一些相同的字段数据,我想删除retrun TextValuePair数组中的重复项。但问题是,如果userid不止一个,它会删除foreach中的最后一个,并在users中重新运行其他 这是我的密码 public TextValuePair[] FindAllUserByNotThisId(int id) { TextValuePair[] users=null; var userids = _uow.Us

我有两个列表,每个列表包含一些相同的字段数据,我想删除retrun TextValuePair数组中的重复项。但问题是,如果userid不止一个,它会删除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); 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; } public TextValuePair[]FindAllUserByNotThisId(int-id) { TextValuePair[]用户=null; var userids=\u uow.UserInGroups.GetAll().Where(x=>x.GroupId==id.ToList().Select(s=>s.UserId); foreach(userid中的var userid) { users=\u uow.users.GetAll().Where(x=>x.UserId!=UserId).ToList() .选择( s=> 新TextValuePair { Text=s.UserName, Value=s.UserId.ToString() }) .ToArray(); } 返回用户; } 如果userids count为3,则会删除每个重复的id,但最后只删除3个id,其他两个id将显示在用户的最终结果中,如下所示:-

用户标识

userid 1 2 3 用户ID 1. 2. 3. 使用者

用户标识用户名 1A 2 b 3 c 4d 它还返回我的前两个

userid username 1 a 2 b 4 d 用户标识用户名 1A 2 b 4d 但我只想

userid username 4 d 用户标识用户名 4d
请帮助..

好吧,我认为您的问题是foreach和对
用户
集合的覆盖。试试这个:

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
集合,我们现在知道
users
集合在where过滤器之后不会被修改。
使用contains,我们可以在不使用循环的情况下计算整个
usersid

@mukesh这就是为什么我在答案中使用
userid
而不是
userid
。您的实现和我的答案之间的独特区别在于,我去掉了foreach,直接在评估中使用
用户ID
(您要筛选的用户ID集合)(使用
包含
而不是
=
操作符)。我理解错了吗?嘿,谢谢,我没有正确地阅读你的答案,而是在sql中使用了我自己的“不在”操作符。我现在正确地看到了你的答案,它与我的答案相似。谢谢我投了赞成票。@mukesh很高兴帮助@mukesh!如果这解决了你的问题,请将其标记为答案,以帮助未来的用户阅读本文。顺便说一下,谢谢你的邀请^^
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;
        }