【问题标题】:Create a list of distinct values from a gridview从网格视图创建不同值的列表
【发布时间】:2014-01-24 19:54:59
【问题描述】:

现在我的代码可以通过在表上运行 SQL 代码获得不同的值。我现在使用存储的过程来填充我的 Gridview 而不是从表中提取并且不能在表上选择不同的,因为它不存在。我想知道是否有人可以通过使用 gridview 的值来指出我创建列表的正确方向。

这是我要切换的当前代码。

connection = new  SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString());

string strSQL = string.Empty;
switch (strColumnName)
{
    case "SiteID":
        strSQL = @"SELECT distinct SiteID, SiteID FROM Sites ";
        break;
    case "OrderDate":
        strSQL = @"SELECT distinct OrderDate, CONVERT(VARCHAR(11), OrderDate, 106) AS [OrderDate] FROM Sites ";
        break;
}

SqlCommand command = new SqlCommand();
command.CommandText = strSQL;
command.Connection = connection;

command.Connection.Open();

SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);

IList<FilterValueSet> filterValueList = new List<FilterValueSet>();

while (dataReader.Read())
{
    filterValueList.Add(new FilterValueSet
    {
        Id = dataReader[0].ToString(),
        Value = dataReader[1].ToString()
    });
}
connection.Close();

return filterValueList.ToArray<FilterValueSet>();

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    你可以使用 Linq Distinct() method 来过滤类似的结果

    return filterValueList.Distinct(equalityComparer).ToArray();
    

    你需要为你的FilterValueSet 类提供一个equality comparer,这样:

    class MyEqualityComparer : EqualityComparer<FilterValueSet>
    {
      public override int GetHashCode(FilterValueSet obj) 
      {
        return obj.Id.GetHashCode();
      }
      public override bool Equals(T x, T y)
      {
        return x.Id.Equals(y.Id);
      }
    }
    

    【讨论】:

    • 感谢您的回复。我之前没有使用过 linq distinct() 方法或质量比较,所以我需要阅读它们。我会让你知道结果如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多