예제 #1
0
        public static List <Tuple <int, ExpandoObject> > ListItems(this SPList list, string key, string fields,
                                                                   bool valueAsObject = false, List <int> idList = null)
        {
            var result     = new List <Tuple <int, ExpandoObject> >();
            var fldId      = key.IsGuid() ? list.FieldById(key.ToGuid()) : list.FieldByName(key);
            var viewFields = new StringBuilder();

            fields.Split('$').ToList().ForEach(item =>
            {
                var fldTitle = item.IsGuid() ? list.FieldById(item.ToGuid()) : list.FieldByName(item);
                if (fldTitle != null)
                {
                    viewFields.AppendFormat("<FieldRef ID='{0}' />", fldTitle.Id.ToString());
                }
            });
            viewFields.AppendFormat("<FieldRef ID='{0}' />", fldId.Id);
            var query = new SPQuery
            {
                ExpandRecurrence = true,
                DatesInUtc       = true,
                ViewFields       = viewFields.ToString(),
                Query            = string.Format("<OrderBy>{0}</OrderBy>", viewFields)
            };

            if (!idList.IsEmpty())
            {
                var whereBuilder = new StringBuilder();
                whereBuilder.AppendLine("<Where>");
                whereBuilder.AppendLine("<In>");
                whereBuilder.Append(string.Format(@"<FieldRef ID='{0}' />", fldId.Title));
                whereBuilder.AppendLine("<Values>");
                idList.ForEach(item =>
                {
                    whereBuilder.AppendFormat("<Value Type='Number'>{0}</Value>", item);
                });
                whereBuilder.AppendLine("</Values>");
                whereBuilder.AppendLine("</In>");
                whereBuilder.AppendLine("</Where>");
                query.Query = string.Format("{0} {1}", whereBuilder, query.Query);
            }
            var itemCollection = list.GetItems(query);

            for (var i = 0; i < itemCollection.Count; i++)
            {
                var id    = itemCollection[i][fldId.InternalName].ToInt();
                var value = (IDictionary <string, object>) new ExpandoObject();
                fields.Split('$').ToList().ForEach(item =>
                {
                    var fldTitle   = item.IsGuid() ? list.FieldById(item.ToGuid()) : list.FieldByName(item);
                    var spListItem = itemCollection[i];
                    if (fldTitle != null && spListItem != null)
                    {
                        object spItemValue;
                        try
                        {
                            spItemValue = valueAsObject ? spListItem.GetObjectValue(fldTitle) : fldTitle.GetFieldValueAsText(spListItem[fldTitle.Id]);
                        }
                        catch
                        {
                            spItemValue = string.Empty;
                        }
                        value.Add(item, spItemValue);
                    }
                });
                result.Add(new Tuple <int, ExpandoObject>(id, (ExpandoObject)value));
            }
            return(result);
        }
예제 #2
0
        public static List <Tuple <int, ExpandoObject> > ListItemsByCriteria(this SPList list, string key, string fields,
                                                                             bool valueAsObject, List <Tuple <string, string> > whereCriteria)
        {
            var    result     = new List <Tuple <int, ExpandoObject> >();
            var    fldId      = key.IsGuid() ? list.FieldById(key.ToGuid()) : list.FieldByName(key);
            IQuery camlQuery  = Camlex.Query();
            var    conditions = new List <Expression <Func <SPListItem, bool> > >();

            if (!whereCriteria.IsEmpty())
            {
                whereCriteria.ForEach(item =>
                {
                    var fieldCriteria = item.Item1.IsGuid() ? list.FieldById(item.Item1.ToGuid()) : list.FieldByName(item.Item1);
                    if (fieldCriteria != null)
                    {
                        conditions.Add(CamlQueryHealper.GetOperation_Eq(fieldCriteria, item.Item2));
                    }
                });
                camlQuery.WhereAll(conditions);
            }
            var viewFields = new List <Guid>();

            fields.Split('$').ToList().ForEach(item =>
            {
                var fldTitle = item.IsGuid() ? list.FieldById(item.ToGuid()) : list.FieldByName(item);
                if (fldTitle != null)
                {
                    viewFields.Add(fldTitle.Id);
                }
            });


            var query = new SPQuery
            {
                ExpandRecurrence = true, DatesInUtc = true,
                ViewFields       = Camlex.Query().ViewFields(viewFields),
                Query            = camlQuery.ToString()
            };
            var itemCollection = list.GetItems(query);

            for (var i = 0; i < itemCollection.Count; i++)
            {
                var id    = itemCollection[i][fldId.InternalName].ToInt();
                var value = (IDictionary <string, object>) new ExpandoObject();
                fields.Split('$').ToList().ForEach(item =>
                {
                    var fldTitle   = item.IsGuid() ? list.FieldById(item.ToGuid()) : list.FieldByName(item);
                    var spListItem = itemCollection[i];
                    if (fldTitle != null && spListItem != null)
                    {
                        object spItemValue;
                        try
                        {
                            spItemValue = valueAsObject ? spListItem.GetObjectValue(fldTitle) : fldTitle.GetFieldValueAsText(spListItem[fldTitle.Id]);
                        }
                        catch
                        {
                            spItemValue = string.Empty;
                        }
                        value.Add(item, spItemValue);
                    }
                });
                result.Add(new Tuple <int, ExpandoObject>(id, (ExpandoObject)value));
            }
            return(result);
        }