区别从IEnumerable中选择ListItem

时间:2017-06-24 03:58:53

标签: c# asp.net linq model-view-controller

我有一个类型为quote的对象列表,我将其传递给视图并在网格中显示。网格上方有许多下拉列表用于过滤。我想根据网格数据使用不同的有效选项列表填充dropdown列表。我正在看的是'Created By'。

public IEnumerable<SelectListItem> GetCreatedBy(IEnumerable<Quote> quotes)
{

    var x = quotes.GroupBy(q => new {
             ListValue = q.CreatedBy.samAccountName, 
             ListText = q.CreatedBy.DisplayName})
                .Select(group => new SelectListItem { 
                      Value = group.ListValue, 
                      Text = group.ListText });

        return x;
    }

我得到的错误是:

  

“IGrouping&LT ;,   报价&GT;”不包含'ListValue'的定义,不包含   扩展方法'ListValue'接受类型的第一个参数   “IGrouping&LT ;,   报价&GT;”可以找到(你是否错过了使用指令或   装配参考?)

'Quote'有一个'User'对象作为'Created By'我希望DropDownList填充不同的用户samAccountName和DisplayName,而不必重新查询以获取此列表。

我已使用.Distinct()尝试了.GroupBy()以及不同版本的代码。

我是MVC的新手,对lambda表达式来说是新手。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用GroupBy获取不同的值,然后使用组中的第一个实例来获取您的值。

var x = quotes
    .GroupBy(q =>
        new 
        {
            q.CreatedBy.samAccountName,
            q.CreatedBy.DisplayName,
        })
    .Select(q => 
        new SelectListItem
        {
            Value = q.First().CreatedBy.samAccountName,
            Text = q.First().CreatedBy.DisplayName,
        });