Requirement using Lambda Expression:
- Get distinct values from SharePoint list between two date range values.
- Find Count, Average, Sum from SharePoint based on above distinct values.
- Join two lists using lambda expression.
Consider two lists:
- Feedback Report
- Projects
- using (SPSite oSite = new SPSite(SPContext.Current.Site.Url))
- {
- using (SPWeb web = oSite.OpenWeb())
- {
- SPList ResultList = web.Lists.Cast<SPList>().FirstOrDefault(list => list.RootFolder.Name == "Feedback Report");
- SPList ProjectstList = web.Lists["Projects"];
- IEnumerable<object> itemsDistinct = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToString(item["Project Name"]) != "" &&
- (Convert.ToDateTime(Convert.ToDateTime(item["Created"]).ToShortDateString()) >= Convert.ToDateTime(dtStartdate.ToShortDateString())
- && Convert.ToDateTime(Convert.ToDateTime(item["Created"]).ToShortDateString()) <= Convert.ToDateTime(dtEnddate.ToShortDateString())))
- .Select(item => item["Project ID"])
- .Distinct();
-
- using (IEnumerator<object> enumerator = itemsDistinct.GetEnumerator())
- {
- while (enumerator.MoveNext())
- {
- Int32 iProjectID = Convert.ToInt32(enumerator.Current.ToString());
-
- Int32 RatingCount = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToInt32(item["Project ID"]) == iProjectID)
- .Count();
-
- double OverallAverage = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToInt32(item["Project ID"]) == iProjectID)
- .Average(t => Convert.ToDouble(t["Overall"]));
-
- double OverallSum = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToInt32(item["Project ID"]) == iProjectID)
- .Sum(t => Convert.ToDouble(t["Overall"]));
-
-
- IEnumerable<SPList> projs = ProjectstList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToInt32(item["ID"]) == iProjectID)
- .Select(item =>
- {
- ProjectName = Convert.ToString(item["Project Title"]);
- ProjectManager = Convert.ToString(item["Project Manager"]);
- });
-
- IEnumerator<object> icnumProjs = projs.GetEnumerator();
- }
-
- Int32 TotalRatingCount = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToString(item["Project Name"]) != "")
- .Count();
-
- double TotalOverallAverage = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToString(item["Project Name"]) != "")
- .Average(t => Convert.ToDouble(t["Overall"]));
-
- double TotalOverallSum = ResultList.Items.Cast<SPListItem>()
- .Where(item => Convert.ToString(item["Project Name"]) != "")
- .Sum(t => Convert.ToDouble(t["Overall"]));
- }
- }
- }