Обычно к элементу списка в SharePoint мы обращаемся так:
SPListItem item = mylist.GetItemById(id);
item["FirstName"] = "John";
item["LastName"] = "Smith";
item["FullName"] = (string)item["FirstName"] +" "+(string)item["LastName"];
item["Amount"] = (int)item["Amount"] + 100;
С применением ExpandoObject код становится более читаемым.
SPListItem item = mylist.GetItemById(id);
dynamic person = item.Expand(); //см. код расширения ниже
person.FirstName = "John";
person.LastName = "Smith";
person.FullName = person.LastName +" "+person.FirstName;
person.Amount += 100;
item.Inject((object)person); //также см. код расширения
Исходный код расширения:
public static class SPListMapperExtension
{
public static dynamic Expand(this SPListItem listItem)
{
dynamic ex = new ExpandoObject();
var dynFields = listItem.Fields.OfType().Where(x => !x.Hidden && x.CanBeDisplayedInEditForm);
foreach (var f in dynFields)
{
(ex as IDictionary).Add(f.InternalName, listItem[f.InternalName]);
}
return ex;
}
public static void Inject(this SPListItem listItem, dynamic obj)
{
//dynamic o = (dynamic)obj;
ExpandoObject ex = obj;
var dynFields = listItem.Fields.OfType().Where(x => !x.Hidden && x.CanBeDisplayedInEditForm);
foreach (var f in dynFields)
{
listItem[f.InternalName] =
(ex as IDictionary)[f.InternalName];
}
}
}

0 коммент.:
Отправить комментарий