我有两个列表,每个列表包含一些相同的字段数据,我想在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
请帮助..
答案 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
。