Copyright from: https://rmanimaran.wordpress.com/
Get Distinct Values from a SharePoint List along with Where Condition.
Q: I have a SharePoint List named Sales with the following values. Here Country field is having repeating country names. If I want to get the distinct values of the country from this how to get that.
Using List‘s method: GetDistinctFieldValues
1
2
3
4
5
6
7
8
9
10
11
| SPList myList = web.Lists.Cast"Sales");if(myList!=null) { object[,] UniqueValues; uint UniqueValuesCount = myList.GetDistinctFieldValues(myList.Fields[SPBuiltInFieldId.Title], out UniqueValues);for (int i = 0; i < UniqueValuesCount; i++) { Console.WriteLine(UniqueValues.GetValue(0, i).ToString()); }} |
The above code will print the following values
IND
AUS
CAN
USA
The above output can be get using the Lamda expression
1
2
3
4
5
6
7
8
9
10
| IEnumerable<object> itemsDistinct = myList.Items.Cast.Select(item => item["Title"]).Distinct();using (IEnumerator<object> enumerator = itemsDistinct.GetEnumerator()){ while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current.ToString()); }} |
The above code also returns the distinct Country values from the Sales List.
Suppose I want to check a condition while getting a distinct count. Those country which meets that condition needs to be get displayed. This can be done in Lamda expression.
1
2
3
4
5
6
7
8
9
10
11
| IEnumerable<object> itemsDistinctWithFilter = myList.Items.Cast.Where(item => Convert.ToInt32(item["Sales"]) > 50).Select(item => item["Title"]).Distinct();using (IEnumerator<object> enumerator = itemsDistinctWithFilter.GetEnumerator()){ while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current.ToString()); }} |
The above code will displays the following output.
IND
USA
AUS
Note: The GetDistinctFieldValues will returns the Country names in ascending order. But the Lambda we need to do the sort explicity.
Sorting in ascending
1
2
3
4
5
| IEnumerable<object> itemsDistinctWithFilter = myList.Items.Cast.Where(item => Convert.ToInt32(item["Sales"]) > 50).Select(item => item["Title"]).Distinct().OrderBy(item=>item); |
Now the Output is
AUS
IND
USA
Sort in Descending
1
2
3
4
5
| IEnumerable<object> itemsDistinctWithFilter = myList.Items.Cast.Where(item => Convert.ToInt32(item["Sales"]) > 50).Select(item => item["Title"]).Distinct().OrderByDescending(item=>item); |
Now the Output is
USA
IND
AUS

No comments:
Post a Comment