Получение подмножеств из Subsonic Collections - PullRequest
0 голосов
/ 05 июня 2009

Я использую Subsonic Collections, чтобы получить список записей расписания из нашей базы данных, а затем привязать их к пользовательским элементам управления ASP.net, которые я создал на странице.

Можно ли разбить одну большую коллекцию на несколько подмножеств на основе определенного параметра?

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

Было бы также неплохо, так как мне не нужно было бы сначала получать список кодов работ, для которых у сотрудника есть данные, а затем запускать несколько вызовов базы данных для заполнения каждой коллекции (qry.AddWhere ("код_проекта", код_дания); qry.ExecuteReader ();)

Ответы [ 3 ]

1 голос
/ 06 июня 2009

Вы можете использовать LINQ, чтобы нарезать свою большую коллекцию и использовать ее в качестве источника данных для сеток. Примерно так:

var dbResults = new TimesheetCollection()
    .Where(Timesheet.Columns.EmployeeID, empId)
    .Load();

grid1.DataSource = dbResults.Where(t => t.JobCode == jc1);
grid2.DataSource = dbResults.Where(t => t.JobCode == jc2);

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

// IEnumerable<int> of jobs
var jobs = dbResults.Select(t => t.JobCode).Distinct();

Однако обратите внимание, что сетка DataSource теперь IEnumerable<Timesheet> вместо объекта TimesheetCollection, если это имеет значение.

0 голосов
/ 28 июля 2009

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

Corey,

Кажется, что Load () извлекает больше записей из базы данных и добавляет их в коллекцию.

У меня есть таблица, которая содержит 14 строк. 5 строк имеют тип «ЕДА», остальные 9 имеют тип «ДРУГОЙ». Когда я запускаю следующий код:

Dim allActivities As New OnsScheduleActivityCollection
allActivities.LoadAndCloseReader(OnsScheduleActivity.FetchAll())

Dim justMeals As New OnsScheduleActivityCollection
justMeals = allActivities.Where("ActivityType", "MEAL").Load()

Response.Write(allActivities.Count & "<br />")
Response.Write(justMeals.Count & "<br />")

Ответ отображает: 19 19

Когда я использую Filter () вместо Load (), ответ отображает: 5 5

Это было бы нормально, за исключением того, что я на самом деле не хочу изменять основную коллекцию, я просто хочу получить подмножество, которое я храню в новой коллекции (justMeals), но оставить основную коллекцию (allActivities) в ее первоначальном состоянии Моим желаемым результатом было бы отображение ответа «14 5». 14 для количества строк в allActivies и 5 в justMeals.

Это вообще возможно?

Mike

0 голосов
/ 06 июня 2009

Должно быть в состоянии сделать это

Dim bigCollection as TimeSheetCollection
Dim job1Collection as New TimeSheetCollection = Nothing
Dim job2Collection as New TimeSheetCollection = Nothing

bigCollection = New TimeSheetCollection().Where("employeeid",employeeID).Load()
job1Collection = bigCollection.Where("job_code",jc1).Load()
job2Collection = bigCollection.Where("job_code",jc2).Load()
...