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"]));
//join with projects list
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"]));
}
}
}