我有一个用户组列表和一个SPList。我需要获取CreatorID(列)等于用户组ID的项目的ID。
我的意思是,在mi列表中我有20个字段,有三个coulmns,其中一个是字段ID,其他名称和其他GroupID。然后......我有一个拥有所有组的用户。
我需要知道哪个ID在列表和用户组中具有相同的GruopID。
我有这个,但我认为使用linq它可能是快速且更好的方式......但我不知道如何使用LinQ来做到这一点:
public static int GetDepartmentID(int userID, Guid siteID, Guid webID)
{
int departmentID = 0;
try
{
SPUtility.ValidateFormDigest();
SPSecurity.RunWithElevatedPrivileges(delegate ()
{
using (SPSite site = new SPSite(siteID))
{
using (SPWeb web = site.OpenWeb(webID))
{
// Se obtiene el ID del grupo del usuario
SPUser usuario = web.SiteUsers.GetByID(userID);
//Se obtiene el departamento asociado a ese grupo de usuario
SPList listaDepartamentos = site.RootWeb.Lists[Properties.Listas.DEPARTAMENTOS];
SPListItemCollection listItemCollectionDepartamentos = listaDepartamentos.Items;
foreach (SPListItem listItemDepartamentos in listItemCollectionDepartamentos)
{
for (int i = 0; i < usuario.Groups.Count; i++)
{
if (Convert.ToInt32(listItemDepartamentos["IDCreador"]) == usuario.Groups[i].ID)
{
departmentID = listItemDepartamentos.ID;
break;
}
}
}
}
}
});
}
catch
{ throw; }
return departmentID;
}
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:0)
您可以使用LINQ替换foreach/for
循环:
var userIDs = new HashSet<Int32>(usuario.Groups);
departmentID = listItemCollectionDepartamentos.First(listItemDepartamentos => userIDs.Contains(Convert.ToInt32(listItemDepartamentos["IDCreador"]))).ID;