简体   繁体   English

使用 LINQ 语句在列表中使用 Select 和 Where

[英]Using Select and Where in a List using LINQ statement

This is the MySQL table.这是MySQL表。

+-------+-------+
| p_int | p_uni |
+-------+-------+
|     0 | seat  |
|     1 | X400  |
|     4 | X400  |
|     2 | X400  |
|     2 | X4SVR |
|     3 | X400  |
+-------+-------+
6 rows in set

In the MasterPage of website developed an ASP.NET with Visual Studio 2019 , C# and .NET Framework 4.7 , I have create two List<string> using the values of MySQL table, as在使用Visual Studio 2019C#.NET Framework 4.7开发ASP.NET的网站的MasterPage中,我使用 MySQL 表的值创建了两个List<string> ,如

List<string> Listp_uni = new List<string>();
List<string> Listp_int = new List<string>();

Container.p_int = reader["p_int"].ToString();
Container.p_uni = reader["p_uni"].ToString();

Listp_uni.Add(Container.p_uni.ToString());
Listp_int.Add(Container.p_int.ToString());

Container.p_uni = string.Join(",", Listp_uni.Select(e => "'" + e + "'").Distinct());
Container.p_int = string.Join(" ", Listp_int.Select(e => "" + e + "").Distinct());

the return's of these List<string> are这些List<string>的返回是

'seat','X400','X4SVR'
0 1 4 2 3

I need select from the List<string> Listp_uni the value equal to X4SVR using LINQ我需要从选择List<string> Listp_uni值等于X4SVR使用LINQ

I have try without success我尝试过但没有成功

var studentNames = Mp.Container.p_uni.Where(s => s.Mp.Container.p_uni == "X4SVR")
                   .Select(s => s);

the error is错误是

Compiler Error Message: CS1061: 'char' does not contain a definition for 'Mp' and no extension method 'Mp' accepting a first argument of type 'char' could be found (are you missing a using directive or an assembly reference?)编译器错误消息:CS1061:“char”不包含“Mp”的定义,并且找不到接受“char”类型的第一个参数的扩展方法“Mp”(您是否缺少 using 指令或程序集引用?)

How can I do it?我该怎么做?

Editing question编辑问题

public static class Container
{
    public static string p_int
    {
        get
        {
            if (HttpContext.Current.Session["p_int"] != null)
            {
                return HttpContext.Current.Session["p_int"].ToString();
            }
            return null;
        }
        set
        {
            HttpContext.Current.Session["p_int"] = value;
        }
    }

    public static string p_uni
    {
        get
        {
            if (HttpContext.Current.Session["p_uni"] != null)
            {
                return HttpContext.Current.Session["p_uni"].ToString();
            }
            return null;
        }
        set
        {
            HttpContext.Current.Session["p_uni"] = value;
        }
    }
}


    string constr = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;

    using (MySqlConnection con =
        new MySqlConnection(constr))
    {
        using (MySqlCommand cmd =
            new MySqlCommand())
        {
            try
            {
                if (username != null)
                {
                    con.Open();
                    cmd.Connection = con;
                    cmd.CommandText = "SP_ML_AUTE";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("tusername", username.ToString().ToUpper());

                    using (MySqlDataReader reader =
                        cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            while (reader.Read())
                            {
                                Container.p_int = reader["p_int"].ToString();
                                Container.p_uni = reader["p_uni"].ToString();
                                Listp_uni.Add(Container.p_uni.ToString());
                                Listp_int.Add(Container.p_int.ToString());
                            }

                            Container.p_uni = string.Join(",", Listp_uni.Select(e => "'" + e + "'").Distinct());
                            Container.p_int = string.Join(" ", Listp_int.Select(e => "" + e + "").Distinct());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException("operation failed!", ex);
            }
            finally
            {
                cmd.Connection.Close();
            }
        }
    }

new editing新编辑

DataTable dt = new DataTable();
dt.Columns.Add("p_int", typeof(int));
dt.Columns.Add("p_uni", typeof(string));

dt.Rows.Add(new object[] { 0, "seat" });
dt.Rows.Add(new object[] { 1, "X400" });
dt.Rows.Add(new object[] { 4, "X400" });
dt.Rows.Add(new object[] { 2, "X400" });
dt.Rows.Add(new object[] { 2, "X4SVR" });
dt.Rows.Add(new object[] { 3, "X400" });

string p_int = string.Join(",", dt.AsEnumerable().Select(x => x.Field<int>("p_int")).Distinct());
string p_uni = string.Join(" ", dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).Distinct());

Response.Write(p_int + "<br />" + p_uni + "<br /><br />");

var studentNames = p_uni.Where(s => s.p_uni == "X4SVR").Select(s => s);

Response.Write(studentNames);

Firstly you have to understand we cannot use select in string.首先,您必须了解我们不能在字符串中使用 select。 The main functions are in the link please go through it String functions .主要函数在链接中,请通过它字符串函数 In the below code I've created some examples for selecting在下面的代码中,我创建了一些用于选择的示例

"X4SVR" . “X4SVR” Please check.请检查。 My code is not a better one .But it will give you some insight to solve your issue.我的代码不是更好的代码。但它会给你一些解决问题的见解。

Happy coding :)快乐编码:)

        DataTable dt = new DataTable();
        dt.Columns.Add("p_int", typeof(int));
        dt.Columns.Add("p_uni", typeof(string));

        dt.Rows.Add(new object[] { 0, "seat" });
        dt.Rows.Add(new object[] { 1, "X400" });
        dt.Rows.Add(new object[] { 4, "X400" });
        dt.Rows.Add(new object[] { 2, "X400" });
        dt.Rows.Add(new object[] { 2, "X4SVR" });
        dt.Rows.Add(new object[] { 3, "X400" });

        string p_int = string.Join(",", dt.AsEnumerable().Select(x => x.Field<int>("p_int")).Distinct());
        string p_uni = string.Join(" ", dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).Distinct());

        Response.Write(p_int + "<br />" + p_uni + "<br /><br />");

        // if you want to get p_uni and p_int take from the datatable itself
        //it will return matching  p_uni and p_int
        var studentNames = dt.AsEnumerable().Where(s => s.Field<string>("p_uni") == "X4SVR").Select(y => y);

        //if you want get the name only
        //Method - using the array
        string [] p_uniArray = dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).ToArray();
        var studentNames1 = p_uniArray.AsEnumerable().Where(s => s == "X4SVR").Select(y => y);

        //if you need to take from p_uni string it self please convert it into array  like
        //here you are not using any separator so I'm splitting it with space

        var stName = p_uni.Split(" ");
        var studentNames2 = stName.Where(x => x == "X4SVR").Select( y => y).Distinct();

      //  var studentNames = dt.Where(s => s.p_uni == "X4SVR").Select(s => s);

        Response.Write(studentNames);

Try following from a datatable :尝试从数据表中执行以下操作:

            DataTable dt = new DataTable();
            dt.Columns.Add("p_int", typeof(int));
            dt.Columns.Add("p_uni", typeof(string));
            
            dt.Rows.Add(new object[] { 0, "seat"});
            dt.Rows.Add(new object[] { 1, "X400"});
            dt.Rows.Add(new object[] { 4, "X400"});
            dt.Rows.Add(new object[] { 2, "X400"});
            dt.Rows.Add(new object[] { 2, "X4SVR"});
            dt.Rows.Add(new object[] { 3, "X400"});


            string p_int = string.Join(",", dt.AsEnumerable().Select(e => e.Field<int>("p_int")).Distinct());
            string p_uni = string.Join(" ", dt.AsEnumerable().Select(e => e.Field<string>("p_uni")).Distinct());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM