var lstTemp = new List<string>() { "red", "delicious", "apple" };
var subsets = from m in Enumerable.Range(0, 1 << lstTemp.Count)
select(from i in Enumerable.Range(0, lstTemp.Count)
where (m & (1 << i)) != 0
select lstTemp[i]).ToList();
var lstTemp = new List<string>() { "red", "delicious", "apple" };
var subsets = from m in Enumerable.Range(0, 1 << lstTemp.Count)
select