首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取SharePoint用户并与SPList进行比较

获取SharePoint用户并与SPList进行比较
EN

Code Review用户
提问于 2012-06-20 15:42:18
回答 2查看 3.4K关注 0票数 2

我有一个自定义的SPList,它有一个字段Assigned To,现在我可以添加我想要的项目,它们可以有相同的标题和相同的User,但是我想要的是一个脚本,这样我就只能得到用户的电子邮件地址的不同数量,例如,如果一个用户被分配给超过一个项目,我只会得到一次电子邮件地址,这是我写下的代码,但是我不认为它足够好。

代码语言:javascript
复制
using (SPSite site = new SPSite("www.local.com"))
    using (SPWeb web = site.OpenWeb())
    {
        SPList mySourceList = web.Lists["ListName"];

        SPQuery mySourceListQuery = new SPQuery();

        mySourceListQuery.Query =

            "<OrderBy><FieldRef Name='AssignedTo' />" +
                     "<FieldRef Name='Title' />" +
            "</OrderBy>";



        SPListItemCollection mySourceItemColl = mySourceList.GetItems(mySourceListQuery);


        foreach (SPUser user in web.Users)
        {
            foreach (SPListItem mySourceListItem in mySourceItemColl)
            {
                name = mySourceListItem["AssignedTo"].ToString();

                name = name.Substring(name.IndexOf("#") + 1);

                if (user.Name == name)
                {
                    Console.WriteLine(user.Email);
                }
            }
        }
EN

回答 2

Code Review用户

回答已采纳

发布于 2012-06-20 20:11:11

正如所写的,您的代码将为站点中的每个用户处理mySourceItemColl中的每一项。我宁愿只看一遍收藏。

因此,我会写得更像这样:

代码语言:javascript
复制
using (SPSite site = new SPSite("www.local.com"))
    using (SPWeb web = site.OpenWeb())
    {
        SPList list = web.Lists["ListName"];
        SPQuery query = new SPQuery();
        query.Query =
            "<OrderBy><FieldRef Name='AssignedTo' />" +
                "<FieldRef Name='Title' />" +
            "</OrderBy>";
        SPitemCollection items = list.Getquery(query);
        List<string> emails = new List<string>();
        foreach (SPListItem item in items)
        {
            SPFieldUserValue value = 
                new SPFieldUserValue(web, item["AssignedTo"].ToString());
            if (null != value && 
                null != value.User && 
                !emails.Contains(value.User.Email)) 
            {
                emails.Add(value.User.Email);
                Console.WriteLine(value.User.Email);
            }
        }
    }
}
票数 2
EN

Code Review用户

发布于 2012-06-20 17:26:54

  1. my前缀是不必要的,我会调用变量sourceListsourceListQuerysourceItems等。
  2. 我会为此创建一个方法: name = name.Substring(name.IndexOf("#") + 1);我猜removeId可能是个好名字。方法名称将帮助读者理解作者的意图。
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/12838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档