C# 字符串[]接收不同于列表

C# 字符串[]接收不同于列表,c#,winforms,C#,Winforms,我用数据库中的数据创建了一个列表。 列表中的结构是: public struct GetInfoForGraph { public float A { get; set; } public float B { get; set; } public DateTime Time { get; set; } public String Customer_name { get; set; } public S

我用数据库中的数据创建了一个列表。 列表中的结构是:

    public struct GetInfoForGraph
    {
        public float A { get; set; }
        public float B { get; set; }
        public DateTime Time { get; set; }
        public String Customer_name { get; set; }
        public String Type_name { get; set; }
        public String Program_name { get; set; }
        public int Id_Tbl_Program { get; set; }
        public int Id_Tbl_File_Names { get; set; }
        public string File_Name { get; set; }
    }
我在列表中添加如下数据:

public List<GetInfoForGraph> CreatesListInfoForGraphPoints()
{
    string sqlCommand = "SELECT A AS A";
    sqlCommand += ", B AS B";
    sqlCommand += ", TIME_FORMATTED AS Time";
    sqlCommand += ", CUSTOMER_NAME As Customer_name";
    sqlCommand += ", PROGRAM_NAME As Program_name";
    sqlCommand += ", TYPE_NAME As Type_name";
    sqlCommand += ", ID_TBL_PROGRAM AS Id_Tbl_Program";
    sqlCommand += ", ID_TBL_FILE_NAMES as Id_Tbl_File_Names";
    sqlCommand += ", ONLY_FILE_NAME as File_Name";
    sqlCommand += "  FROM VW_MAIN_INFO";
    sqlCommand += "  where CUSTOMER_NAME = '" + Project.CustomerName + "'";
    sqlCommand += "  and PROGRAM_NAME = '" + Project.ProgramName + "'";
    sqlCommand += "  and TYPE_NAME = '" + Project.TypeName + "'";
    sqlCommand += "  ORDER BY Time";

    List<GetInfoForGraph> DataForGraph = new List<GetInfoForGraph>();
    SqlConnection conn = new SqlConnection(@"XXXX");
    SqlCommand cmd = new SqlCommand(sqlCommand, conn);
    SqlDataReader dr;
    try
    {
        conn.Open();
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            DataForGraph.Add(new GetInfoForGraph()
            {
                A = dr.GetFloat(dr.GetOrdinal("A")),
                B = dr.GetFloat(dr.GetOrdinal("B")),
                Time = dr.GetDateTime(dr.GetOrdinal("Time")),
                Customer_name = dr.GetString(dr.GetOrdinal("Customer_name")),
                Program_name = dr.GetString(dr.GetOrdinal("Program_name")),
                Type_name = dr.GetString(dr.GetOrdinal("Type_name")),
                Id_Tbl_Program = dr.GetInt32(dr.GetOrdinal("Id_Tbl_Program")),
                Id_Tbl_File_Names = dr.GetInt32(dr.GetOrdinal("Id_Tbl_File_Names")),
                File_Name = dr.GetString(dr.GetOrdinal("File_Name"))
            });

        }
        dr.Close();
    }

    catch (Exception ex)
    {
        ActivityLog.LogError(new StackTrace(true), ex);
    }
    finally
    {

        conn.Close();
    }

    return DataForGraph;

} // End of List<GetInfoForGraph> CreatesListInfoForGraphPoints()
public List CreatesListInfoForGraphPoints()
{
string sqlCommand=“选择一个作为”;
sqlCommand+=“,B作为B”;
sqlCommand+=“,时间_格式为时间”;
sqlCommand+=“,客户名称作为客户名称”;
sqlCommand+=“,程序名为程序名”;
sqlCommand+=”,键入名称作为键入名称”;
sqlCommand+=“,ID_TBL_程序作为ID_TBL_程序”;
sqlCommand+=“,ID_TBL_文件名作为ID_TBL_文件名”;
sqlCommand+=“,仅文件名作为文件名”;
sqlCommand+=“来自VW_主信息”;
sqlCommand+=“其中CUSTOMER_NAME=”+Project.CustomerName+“”;
sqlCommand+=”和PROGRAM_NAME='“+Project.ProgramName+'”;
sqlCommand+=”和TYPE_NAME='“+Project.TypeName+'”;
sqlCommand+=“按时间排序”;
List DataForGraph=新列表();
SqlConnection conn=新的SqlConnection(@“XXXX”);
SqlCommand cmd=新的SqlCommand(SqlCommand,conn);
SqlDataReader-dr;
尝试
{
conn.Open();
dr=cmd.ExecuteReader();
while(dr.Read())
{
添加(新的GetInfoForGraph()
{
A=dr.GetFloat(dr.GetOrdinal(“A”)),
B=dr.GetFloat(dr.GetOrdinal(“B”)),
时间=dr.GetDateTime(dr.GetOrdinal(“时间”)),
Customer_name=dr.GetString(dr.GetOrdinal(“Customer_name”)),
Program_name=dr.GetString(dr.GetOrdinal(“Program_name”)),
Type_name=dr.GetString(dr.GetOrdinal(“Type_name”)),
Id_Tbl_Program=dr.GetInt32(dr.GetOrdinal(“Id_Tbl_Program”),
Id_Tbl_File_Names=dr.GetInt32(dr.GetOrdinal(“Id_Tbl_File_Names”),
文件名=dr.GetString(dr.GetOrdinal(“文件名”))
});
}
Close博士();
}
捕获(例外情况除外)
{
ActivityLog.LogError(新StackTrace(true),ex);
}
最后
{
康涅狄格州关闭();
}
返回图形数据;
}//列表末尾CreatesListInfoForGraphPoints()
我想在我的“下拉”事件中添加以下信息:

  • 与列表中的文件名不同
我尝试的是: *来自

private void CboxReceiveNameFile_下拉列表(对象发送方,事件参数e)
{
List result=DataForGraph.Select(o=>o.FirstInteger.Distinct().ToList();
}
但是它给我的错误是“object”不包含Select的定义,并且没有扩展方法“Select”接受类型为“object”的第一个参数


有人能帮我吗?欢迎任何帮助!谢谢

在做任何事情之前,首先要做的事情是:停止生成那样的SQL。改为使用参数化SQL。这将使代码更清晰,避免出现问题的转换,并避免SQL注入攻击。请阅读指南-它将澄清您正在定义
对象DataForGraph
的事实,并通过隐藏SQL注入示例来避免尴尬……您正在导入Linq吗?否则,将using System.Ling添加到源文件的顶部在您的示例中,
DataForGraph
不在您使用它的范围内,因此很难判断发生了什么。@JonSkeet,谢谢您的建议。和我一起编码的人提到,在过去,C代码有一个字符串限制,这就是他这样做的原因。无论如何,我会清理这个-谢谢你。
        private void CboxReceiveNameFile_DropDown(object sender, EventArgs e)
    {

        List<int> result = DataForGraph.Select(o => o.FirstInteger).Distinct().ToList();

    }