2010-09-06 5 views
3

У меня есть два управления RepeaterКак поставить два условия в лямбда-выражения

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 Repeater, где я хочу, чтобы отобразить Total Fee В ожидании

Я пытался, но не в состоянии

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

Какое сообщение об ошибке вы получаете? –

+0

Я думаю, что вы хотите .Where() not a .Select() Тогда вы можете просто && условия вместе. Где (p => p.x == a && p.y == b) – Robaticus

ответ

2

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

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

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


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

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

1

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

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

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