限制linq结果.NET的结果

时间:2015-02-04 20:24:45

标签: c# .net linq

我正在使用linq从枚举列表中获取结果列表。现在我将返回完整列表。

执行以下操作:

       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
}

我的问题是如何使用我当前的Linq语句只返回String,DateTime,Decimal和Integer。

4 个答案:

答案 0 :(得分:6)

如果您只想要这些指定的值,请尝试以下方法:

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

答案 1 :(得分: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() };

答案 2 :(得分:3)

如果您已经知道所需的值列表,只需将其用作源:

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

答案 3 :(得分: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()}
}