我有一个自定义的SPList,它有一个字段Assigned To,现在我可以添加我想要的项目,它们可以有相同的标题和相同的User,但是我想要的是一个脚本,这样我就只能得到用户的电子邮件地址的不同数量,例如,如果一个用户被分配给超过一个项目,我只会得到一次电子邮件地址,这是我写下的代码,但是我不认为它足够好。
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);
}
}
}发布于 2012-06-20 20:11:11
正如所写的,您的代码将为站点中的每个用户处理mySourceItemColl中的每一项。我宁愿只看一遍收藏。
因此,我会写得更像这样:
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);
}
}
}
}发布于 2012-06-20 17:26:54
my前缀是不必要的,我会调用变量sourceList、sourceListQuery、sourceItems等。removeId可能是个好名字。方法名称将帮助读者理解作者的意图。https://codereview.stackexchange.com/questions/12838
复制相似问题