2015-02-04 2 views
0

Я использую linq для получения списка результатов из списка перечислений. Сейчас я возвращаю полный список.Ограничить результаты из результатов linq .NET

Doing следующее:

 ViewData["listDT"] = from c in Enum.GetValues(typeof(ColumnDataType)).Cast<ColumnDataType>().ToList() 
            select new SelectListItem { Value = c.ToString(), Text = c.ToString() }; 

Где мой ColumnDateType перечисление:

public enum ColumnDataType 
{ 
    String, 
    Date, 
    DateTime, 
    Integer, 
    Decimal, 
    MultipleChoice, 
    PictureBox, 
    Attachment, 
    Boolean, 
    AutoNumber 
} 

Мой вопрос, как я могу сделать так, что я только вернуть String, DateTime, Decimal и Integer, используя мой текущее заявление Linq.

ответ

6

Если вы только хотите эти значения, попробуйте что-то вроде этого:

ViewData["listDT"] = from c in new[] 
        { 
         ColumnDataType.String, 
         ColumnDataType.DateTime, 
         ColumnDataType.Decimal, 
         ColumnDataType.Integer 
        } 
        select new SelectListItem 
        { 
         Value = c.ToString(), 
         Text = c.ToString() 
        }; 
3

Вы можете использовать пункт where фильтровать результаты:

ViewData["listDT"] = from c in Enum.GetValues(typeof(ColumnDataType)).Cast<ColumnDataType>().ToList() 
        where c == ColumnDataType.String 
          || c == ColumnDataType.DateTime 
          || c == ColumnDataType.Decimal 
          || c == ColumnDataType.Integer 
        select new SelectListItem { Value = c.ToString(), Text = c.ToString() }; 
3

Если вы уже знаете, список значений, которые вы хотите, просто использовать его в качестве источника:

from c in new [] {ColumnDataType.String, ColumnDataType.DateTime, ColumnDataType.Decimal, ColumnDataType.Integer} 
select new SelectListItem { Value = c.ToString(), Text = c.ToString() }; 
2

Есть более чистые способы сделать это с помощью но простой способ - добавить предложение where.

from c in Enum.GetValues(typeof(ColumnDataType)).Cast<ColumnDataType>().ToList() 
where c == ColumnDataType.String 
|| c == ColumnDataType.DateTime 
|| c == ColumnDataType.Decimal 
select new SelectListItem { Value = c.ToString(), Text = c.ToString() }; 

Одна вещь, чтобы рассмотреть следующие вопросы: если вы знаете, значения, которые вы хотите добавить, почему не сделать что-то вроде этого: вместо

var availableValues = new List<SelectListItem> { 
    new SelectListItem {Value = ColumnDataType.String.ToString()}, 
    new SelectListItem {Value = ColumnDataType.DateTime.ToString()} 
    new SelectListItem {Value = ColumnDataType.Decimal.ToString()} 
} 
Смежные вопросы