【发布时间】:2021-01-30 00:40:18
【问题描述】:
这是MySQL 表。
+-------+-------+
| p_int | p_uni |
+-------+-------+
| 0 | seat |
| 1 | X400 |
| 4 | X400 |
| 2 | X400 |
| 2 | X4SVR |
| 3 | X400 |
+-------+-------+
6 rows in set
在网站的MasterPage 开发了一个ASP.NET 和Visual Studio 2019、C# 和.NET Framework 4.7,我使用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());
这些List<string>的回报是
'seat','X400','X4SVR'
0 1 4 2 3
我需要使用LINQ从List<string> Listp_uni中选择等于X4SVR的值
我试过了,没有成功
var studentNames = Mp.Container.p_uni.Where(s => s.Mp.Container.p_uni == "X4SVR")
.Select(s => s);
错误是
编译器错误消息:CS1061:'char' 不包含定义 对于 'Mp' 并且没有扩展方法 'Mp' 接受第一个参数 可以找到类型“char”(您是否缺少 using 指令或 汇编参考?)
我该怎么做?
编辑问题
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();
}
}
}
新编辑
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);
【问题讨论】:
-
看起来
Mp.Container.p_uni包含单个字符串,而不是您可能期望的字符串列表。很可能是"'seat','X400','X4SVR',..." -
Where中的s参数是char,而不是您所期望的string。 -
@gkulshrestha 是的,
Mp.Container.p_uni是'seat','X400','X4SVR' -
@gkulshrestha 好奇什么是 Mp.Container.p_uni ?我在这段代码中找不到它:|
-
@AmalPS 好的,我已经用
Mp.Container.p_uni编辑了这个问题