Звоните ToList()
по результатам запроса. Затем кэшируйте результаты в статической переменной, доступ к которой осуществляется в поточно-ориентированном виде:
private static List<Whatever> dropDownListValues;
private static object listLock = new object();
public static IList<Whatever> DropDownListValues
{
get
{
lock(listLock)
{
if (dropDownListValues == null ||
DetectValuesChanged()) // However you implement this!
{
dropDownListValues = // insert your query here
.ToList();
}
return dropDownListValues;
}
}
}