Haskell may well have the shortest program here:
sequence (replicate 4 "abcd")
replicate 4 "abcd" creates a list that repeats "abcd" four times. sequence is a very general, polymorphic, moadic operation that has many uses, among which is generating cartesian products of lists of lists.
It may be possible to duplicate this solution in C# or other .NET languages. Eric Lippert's LINQ solution corresponds to this Haskell solution:
items = ["a", "b", "c", "d"]
query = do i1 <- items
i2 <- items
i3 <- items
i4 <- items
return (i1 ++ i2 ++ i3 ++ i4)
If you compare them, well, note that LINQ's from ... in was inspired by Haskell's <-, and LINQ's select is Haskell's return.
The relationship between the Haskell one-liner solution and the longer one can be brought out by writing our own definition of sequence:
sequence' [] = return []
sequence' (m:ms) = do x <- m
xs <- sequence' ms
return (x:xs)
In LINQ terms, the sequence function allows you to replace the repeated from ix in items statements with just a list of the lists from which to choose each item.
EDIT: a friend just beat me at one-lining this (well, one line except for the import):
import Control.Monad
replicateM 4 "abcd"