如何使用Linq获取listitem字段

时间:2018-02-14 14:51:37

标签: list linq sharepoint

我有一个用户组列表和一个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;
    }

任何人都可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用LINQ替换foreach/for循环:

var userIDs = new HashSet<Int32>(usuario.Groups);
departmentID = listItemCollectionDepartamentos.First(listItemDepartamentos => userIDs.Contains(Convert.ToInt32(listItemDepartamentos["IDCreador"]))).ID;