#c# #asp.net #list #linq
#c# #asp.net #Список #linq
Вопрос:
Это datatable
в C # ASPNET
DataTable dt = new DataTable();
dt.Columns.Add("p_int", typeof(string));
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" });
Со значениями datatable я скомпилировал два разных List<string>
List<string> StringA = new List<string> { string.Join(", ", dt.AsEnumerable().Select(x => x.Field<string>("p_int")).Distinct()) };
List<string> StringB = new List<string> { string.Join(", ", dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).Distinct()) };
Мне нужно извлечь значение X4SVR
из List<string> StringB
и попробовать
var lb = StringB.FirstOrDefault(x => x.Contains("X4SVR"));
Response.Write(lb.ToString() "<br /><br />");
var result = StringB.Where(x => x.Contains("X4SVR")).FirstOrDefault();
Response.Write(result.ToString() "<br /><br />");
var content = StringB.FirstOrDefault(x => x.Contains("X4SVR")) ?? StringB.FirstOrDefault();
Response.Write(content.ToString() "<br /><br />");
string ls_SearchVal = "X4SVR";
var lobj_Result = StringB.All(o => o.Contains(ls_SearchVal));
Response.Write(lobj_Result.ToString() "<br /><br />");
var value = StringB.Find(item => item.Contains("X4SVR")).ToString();
Response.Write(value.ToString() "<br /><br />");
возвращаемое значение никогда не является единственным X4SVR
значением, а
seat, X400, X4SVR
seat, X400, X4SVR
seat, X400, X4SVR
True
seat, X400, X4SVR
Как сделать, чтобы это возвращало только значение X4SVR
?
Комментарии:
1. Вам нужно взглянуть на содержимое stringB . В вашем списке есть один элемент, который является той строкой, которую вы получаете все время. Я не знаю, каким именно вы хотите, чтобы ваш список был.
2. Попробуйте следующее: DataRow row = dt . AsEnumerable() . Где(x => x.Field<string>(«p_uni») == «X4SVR»).FirstOrDefault(); строка p_int = (строка)строка[«p_int»];
Ответ №1:
Непонятно, почему вы возвращаете значение, которое вы уже запрашиваете, но:
var value = dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).FirstOrDefault(s => s.Contains("X4SVR"));
Комментарии:
1. спасибо за ответ, мне нужно вернуть значение, потому что мне нужно сравнивать со значением, извлеченным из таблицы базы данных. Возврат вашего предложения правильный, большое спасибо за эту помощь!
Ответ №2:
Это потому, что оба ваших списка содержат только один элемент (соединенных строк).
Не используйте string.Join()
для этой цели. Вместо этого вы хотите что-то вроде:
var StringA = dt.AsEnumerable().Select(x => x.Field<string>("p_int")).Distinct().ToList();
var StringB = dt.AsEnumerable().Select(z => z.Field<string>("p_uni")).Distinct().ToList();
Затем вы можете получить свое значение, используя следующее:
var lb = StringB.FirstOrDefault(x => x.Contains("someString"));