【问题标题】:Selecting Distinct Values from a List从列表中选择不同的值
【发布时间】:2013-11-19 10:16:22
【问题描述】:

这是我的清单代码:

    public static List<Int32> getValueFilterItems()
    {            
        List<Int32> gridValues = new List<Int32>();

        ASPxGridView gridViewPromo = (ASPxGridView)gridViewPromo.GetRowValues(4, "Value");

        int val = Convert.ToInt32(gridViewPromo);

        gridValues.Add(val);

        return gridValues;
    }

我只想从列表中返回 DISTINCT 值,因为有许多重复值。 这是怎么回事?

谢谢

【问题讨论】:

  • 列表中只有一个元素
  • 这个函数在列表中返回的值不超过一个,你怎么遇到你发的问题,给个细节
  • 你确定什么时候将gridview转换为int?

标签: c# asp.net linq visual-studio


【解决方案1】:

你可以使用Distinct:

return gridValues.Distinct().ToList()

更有效的方法是使用HashSet&lt;Int32&gt;

public static List<Int32> getValueFilterItems()
{            
    HashSet<Int32> values = new HashSet<Int32>();

    ASPxGridView gridViewPromo = (ASPxGridView)gridViewPromo.GetRowValues(4, "Value");

    int val = Convert.ToInt32(gridViewPromo);
    values.Add(val);
    return values.ToList();
}

编辑:您也在使用gridViewPromo,即使它是未初始化的。使用前必须先初始化:

ASPxGridView gridViewPromo = (ASPxGridView) whateverYourGridIs;
int val = Convert.ToInt32(gridViewPromo.GetRowValues(4, "Value"));

最后说明:如果选择单个值,为什么还需要一个集合?

【讨论】:

  • 我得到错误 'System.Linq.Queryable.Distinct(System.Linq.IQueryable)'is a'method',在上下文中无效
  • 好的,我明白你对 hashset 的意思,但是有错误,我不知道为什么:“使用未分配的局部变量 'gridviewpromo'”
  • @user2991718 行错误ASPxGridView gridViewPromo = (ASPxGridView)gridViewPromo.GetRowValues(4, "Value"); 尝试更改它
  • @user2991718:我已经编辑了我的答案以提及gridviewpromo 问题。但我不知道GridView 在哪里,这就是我“使用”whateverYourGridIs 的原因。
  • @user2991718:那我不明白你为什么需要投(以及你想投什么)。直接使用网格:Convert.ToInt32(gridViewPromo.GetRowValues(4, "Value"));。以ASPxGridView 开头的那行似乎完全是多余的。
【解决方案2】:

将返回值改为
return gridValues.Distinct.ToList();

【讨论】:

    【解决方案3】:

    简单的方法是使用:

     return gridValues.Distinct().ToList();
    

    虽然 HashSet 不需要 Distinct。

    您的函数在列表中返回的值不超过一个,我想您是从类似这样的外部调用此函数

    HashSet<Int32> values = new HashSet<Int32>();
    var value1 = getValueFilterItems(4, "Value");
    var value2 = getValueFilterItems(5, "Value");
    
    //HashSet returns true from Add method if element added, returns false if element already exists
    values.Add(value1);
    values.Add(value2);
    

    修改后的函数要带HashSet

    public static Int32 getValueFilterItems(int visibleIndex, string fieldNames)
    {            
        ASPxGridView gridViewPromo = (ASPxGridView)gridViewPromo.GetRowValues(visibleIndex,fieldNames);
        return Convert.ToInt32(gridViewPromo);
    }
    

    【讨论】:

    • 我得到错误 'System.Linq.Queryable.Distinct(System.Linq.IQueryable)'is a'method',在上下文中无效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多