Average is average and median is median. Do not mix that!
There's only one case when average is equal to median and vice versa: for 2-element array when both values are the same, for example:
{10,10}
.
Check this:
void Main()
{
int[] ages = {100,22,13,43,25,61,17,80, 29};
double median = Median(ages);
double greaterThanMedian = median+median*.15;
double lessThanMedian = median-median*.15;
var result = ages.Where(x=> x>lessThanMedian && x<greaterThanMedian)
.ToList();
foreach(var x in result)
Console.WriteLine("{0}", x);
}
public static double Median(int[] arr)
{
if (arr==null) throw new Exception("An array cannot be null!");
bool isEvenNumberOfValues = arr.Length % 2 == 0;
int toSkip = isEvenNumberOfValues ? (arr.Length/2)-1 : arr.Length/2;
int toTake = isEvenNumberOfValues ? 2 : 1;
return arr.OrderBy(x=>x).Skip(toSkip).Take(toTake).Average();
}
According to your code:
var result = csvData.AsEnumerable()
.Where(x=> x.Field<int>("Value")>=lessThanMedian && x.Field<int>("Value")<=greaterThanMedian)
.ToList();
var result1 = csvData.Select(string.Format("(Value >= {0} AND Value <= {1})",lessThanMedian, greaterThanMedian))
.ToList();
Good luck!