Как поставить два условия в лямбда-выражении - PullRequest
3 голосов
/ 06 сентября 2010

У меня есть два элемента управления повторителем

var list = from i in DA.obm_view_studentLists where i.FranchiseID == FranchiseID && i.ExamDate == DateTime.Parse(this.pallavi.DropDownSelectedValue) select i;

Я хочу получить результат за 1 ход из базы данных.

this._approvedStudentList.DataSource = list.Select(e => e.ApprovedByOBM == true);

this._pendingStudentList.DataSource = list.Select(e => e.ApprovedByOBM == false);

У меня есть поле метки (UnPaidTotal) в pendingStudentList Повторитель, на котором я хочу отобразить Общая ожидающая оплата

Я пытался, но не смог

UnPaidTotal = string.Format("{0:c}", list.Select(e => e.ApprovedByOBM == true).Sum(j => j.CourseFee));

Ответы [ 2 ]

2 голосов
/ 06 сентября 2010

Оцените list, чтобы получить все результаты за один выстрел - просто оберните from i in… select i в скобки и добавьте .ToList() в конце.

При установке DataSource замените list.Select(… наlist.Where(…

То же самое при получении неоплаченной суммы - используйте Where вместо Select.


Вам не нужно возвращать две коллекции из базы данных,потому что вы делите результаты на основе логического значения.Вы хотите все результатов запроса, потому что независимо от того, какой результат будет принадлежать той или иной коллекции, вы можете разделить их в памяти.

Select используется длявыполнить преобразование для коллекции, тогда как Where является фильтром.Примером выбора будет manufacturerList = carCollection.Select(car => car.Manufacturer);.Это берет коллекцию автомобилей и превращает ее в перечисляемое Производитель, выбирая только это свойство из каждого члена коллекции.

1 голос
/ 06 сентября 2010

Ключевым моментом здесь является то, что после первой строки кода, где вы создаете запрос для переменной списка, вы еще не вышли в базу данных.Все, что вы сделали, это создали IEnumerable / IQueryable, который знает, как выйти в базу данных и получить ваши данные.Ничего не произойдет, пока вы на самом деле не свяжете его с элементом управления или иным образом не попытаетесь перебрать результаты.

Ваша проблема в том, что когда вы, наконец, связываетесь с первым элементом управления, состояние этого IEnumerable изменяется так, что теперь он указывает на конец набора результатов, а не ожидает открытия базы данных в начале.Когда вы пытаетесь связать второй повторитель, там нет записей.

Самый простой способ исправить это - просто поместить исходные результаты запроса в список, хотя вы должны знать, что это вызовет ваш веб-сервер.загрузить весь набор результатов в оперативную память.Другой вариант - использовать один ретранслятор, упорядочить запрос соответствующим образом и использовать код для вывода желаемого HTML-кода в зависимости от типа строки и дополнительного HTML-кода между разделами.Это будет работать лучше, но пересекает линии между отдельными уровнями.

...