Как написать запрос LINQ для разделения и поиска столбца min и maximum и возврата на основе строковых значений.
Привет,
Как найти минимальное и максимальное значение и отфильтровать строку за строкой на основе параметра.
1. у меня есть следующие данные:
DataTable dt = new DataTable(); dt.Columns.AddRange(new[] { new DataColumn("Studentno"),new DataColumn("GRADE"),new DataColumn("SUB B"), new DataColumn("SUB C(MIN)"), new DataColumn("SUB C(MAX)"), new DataColumn("SUB D(MIN)") ,new DataColumn("SUB D(MAX)"), new DataColumn("FROM"),new DataColumn("TO"),new DataColumn("SUB E(MIN)"), new DataColumn("SUB E(MAX)") }); dt.Rows.Add(101, "A", "100", "80", "200", "200", "550", 20, "100", "200", "500"); dt.Rows.Add(101, "B", "100", "90", "300", "270", "200", 20, "100", null, null); dt.Rows.Add(101, "B", "100", "200", "300", "100", "250", 20, "100", "100", "100"); dt.Rows.Add(101, null, "100", "200", "300", "100", "200", 20, "100", null, null);
2. у меня есть две входные строки, которые я должен "преобразовать" в критерии фильтра:
string string1 = "GRADE#SUB B"; string string2 = "SUB C=100#SUB D=250#SUB E=300";
Сначала я хочу получить строку, которая содержится в пределах 100 ((я.е) подгруппы с (Мин) и Sub c (максимальный)) (взять
string2
и разделите веревку и возьмите первый в этом. SUB C=100).Он должен вернуть две записи:
101,"A", "100", "100", "50", "200", "250", "700", 20, "100" 101, "B", "100", "150", "70", "250", "200", "100", 20, "100"
3. После этого, имея в виду две вышеперечисленные записи, я хочу отфильтровать еще одно условие, которое нужно проверить. Это также необходимо проверить в пределах Min и Max SUB D=300.
Он должен возвращать только одну запись:
101,"A", "100", "100", "50", "200", "250", "700", 20, "100"
4. В конце концов, я хочу получить записи для поля класс и подгруппы Б.
Таким образом, конечным результатом будет
GRADE=A SUB B=100
Примечание: фильтруйте и проверяйте строку внутри строки с помощью
string2
и отобразить результат в виде string1
.пожалуйста. дайте нам знать, если вам понадобятся еще какие-нибудь подробности.
Вывод я хочу либо простой C#, либо Linq-запрос..???
Что я уже пробовал:
DataTable dt = new DataTable(); dt.Columns.AddRange(new[] { new DataColumn("Studentno"),new DataColumn("GRADE"),new DataColumn("SUB B"), new DataColumn("SUB C(MIN)"), new DataColumn("SUB C(MAX)"), new DataColumn("SUB D(MIN)") ,new DataColumn("SUB D(MAX)"), new DataColumn("FROM"),new DataColumn("TO"),new DataColumn("SUB E(MIN)"), new DataColumn("SUB E(MAX)") }); dt.Rows.Add(101, "A", "100", "80", "200", "200", "550", 20, "100", "200", "500"); dt.Rows.Add(101, "B", "100", "90", "300", "270", "200", 20, "100", null, null); dt.Rows.Add(101, "B", "100", "200", "300", "100", "250", 20, "100", "100", "100"); dt.Rows.Add(101, null, "100", "200", "300", "100", "200", 20, "100", null, null); string string1 = "GRADE#SUB B"; string string2 = "SUB C=100#SUB D=250#SUB E=300"; string[][] subCD = string2.Split('#').Select(s => s.Split('=')).ToArray(); <pre> //Split the conidtion string and format the filter expression string[] condition = string2.Split('#'); string filter = ""; foreach (string subcondition in condition) { if (!String.IsNullOrEmpty(filter)) { filter += " AND "; } string[] subconditions = subcondition.Split('='); filter += "[" + subconditions[0] + "] = '" + subconditions[1] + "'"; } //filter the datatable var result = dt.Select(filter); //split the column names string[] fields = string1.Split('#'); //get the column value from the filter result string Grade = result.FirstOrDefault().Field<string>(fields[0]); string SUBB = result.FirstOrDefault().Field<string>(fields[1]);
OriginalGriff
И что же?
Сколько из этого вы сделали?
Какая помощь вам нужна?
gani7787
Код не фильтруется должным образом.
я хочу преобразовать его в linq в приведенном выше коде.
потому что у меня есть еще кое-где условие..
вот почему?..?
Maciej Los
Это не сработает, потому что ваши критерии фильтрации не совпадают с именами столбцов. Там нет столбцов: SUB C, SUB D и даже SUB E. Есть столбцы: суб с(Мин), суб c(Макс), размер D(мин.), суб Д(максимум) и т. д. Понял?
Если я вас хорошо понимаю, вы должны определить критерии поиска следующим образом: SUB C(MIN)>=100 AND C(MAX)<=100
и так далее...
Maciej Los
Другая проблема - это тип данных, например: это уравнение невозможно [SUB C(MIN)]>="100"
потому что " 100 " - это не число, а строка!