To add to what F-ES Sitecore has said:
1) Your query is currently redundant anyway, as you ignore the results:
IEnumerable<String> bookQuery =
from book in MyBooks
where book is true
select book;
foreach (String p in MyBooks)
{
textBox1.Text = textBox1.Text + p.ToString() + Environment.NewLine;
}
Probably, you need to change the loop to this:
foreach (String p in bookQuery)
which uses the results rather than the input.
2) Don't concatenate strings - it gets very inefficient pretty quickly. Remember that strings are immutable, which means they can't be changed once created. So each time you add some more text to a string, you create a new string big enough for both "bits of text". Use a StringBuilder instead. You also don;'t need to convert a string to a string ... ever.
StringBuilder sb = new StringBuilder();
foreach (String p in MyBooks)
{
sb.AppendLine(p);
}
textBox1.Text = sb.ToString();