There is a good chance I don't understand your problem, but here is my take:

I don't think you want the permutations of the array elements, but instead

want a subset of the Cartesian product of the array with itself. E.G. if

the array is A= [a, b, c], the Cartesian product A x A is

{(a,a), (a,b), (a,c), (b,a), (b,b), (b,c), (c,a), (c,b), (c,c)}. The subset

you want excludes an element whose coords are the same, and considers as

duplicates 2 elements that have the same coords (e.g. (a,b) and (b,a) are

the same).

So, you want {(a,b), (a,c), (b,co)}

If you only have a single array, X, crossed only once with itself,

containing more than one element, some potential pseudo code would be:

for (int i = 0; i < x.Length-1; i++)

{

for (int j = i+1; j < x.Length; j++)

{

myFilterList.Add(x[i].MyToString() + " AND " +

x[j].MyToString())

}

}

In your case, x is the list of KeyValue pairs from the dictionary, and you

need to convert each KeyValue to a string via MyToString(), so as to form a

filter, which you add to a list, myFilterList.

What I don't understand about your example:

You have the same key, Column1 associated with two different values. I

don't think the Dictionary allows this.

"Assimalyst" <c_******@hotmail.comwrote in message

news:8c**********************************@s8g2000p rg.googlegroups.com...

Hi

I have a Dictionary<string, List<string>>, which i have successfully

filled. My problem is I need to create a filter expression using all

possible permutations of its contents.

i.e. the dictionary essentially creates the following array:

Key Value

Column1 1

Column1 2

Column2 17

I want to then create an number of filter expressions:

Column1 = 1 AND Column2 = 17

Column1 = 2 AND Column2 = 17

I used a permutation library i found PermuteUtils (

http://www.koders.com/csharp/fid3768...71457A936.aspx

) and the following code:

Dictionary<string, List<string>distinctCellValues = new

Dictionary<string, List<string>>();

ArrayList queryClause = new ArrayList();

{

foreach (KeyValuePair<string, List<string>kvp in

distinctCellValues)

{

foreach (string value in kvp.Value)

{

queryClause.Add(kvp.Key + " = " + value);

}

}

//Convert array to string array

string[] queryClauseString = queryClause.ToArray(typeof(string)) as

string[];

CreateFilterPermutations<string>(queryClauseString ,

distinctCellValues.Count);

}

private void CreateFilterPermutations<T>(IEnumerable<Tinput, int

count)

{

foreach (IEnumerable<Tpermutation in

PermuteUtils.Permute<T>(input, count))

{

foreach (T i in permutation)

{

filterExpressions.Add(i);

}

}

}

This seems to work OK as far as running the CreateFilterPermutations

method, where i just cannot get it to do what i need.

I've manage to get myself very confused by all this, and this only

contains 2 columns. Potentially i could need to be generating

permutations of 10 columns/values or more!! I'm hoping someone can

straighten out my thoughts before my head explodes!!

Thanks