LINQ to SQL запрос - PullRequest
       23

LINQ to SQL запрос

2 голосов
/ 17 ноября 2009

У меня есть объект User, который представляет таблицу User в моей базе данных. В этой таблице есть поле с именем ManagerID, которое ссылается на другую запись пользователя (в основном отображение сотрудника на менеджера). У каждого пользователя также будет ссылка на другую таблицу, в которой может быть несколько записей, для примера мы назовем ее Records.

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

В качестве небольшого примера того, что мне нужно сделать:

User manager = Repository.FindUser('12345');
List<Record> TeamRecordCollection = new List<Record>();

// add the managers records to the team collection
var managerRecords = GetRecords(manager, DateTime.Today);
TeamRecordCollection.AddRange(managerRecords);

// add each individual team members records
foreach (var user in manager.TeamMembers)
{
    var records = GetRecords(user, DateTime.Today);
    TeamRecordCollection.AddRange(records);
}

...

private IEnumerable<Record> GetRecords(User user, DateTime date)
{
    var records = from rec in user.Records
                  where rec.DateSubmitted == date
                  select rec;
    return records.AsEnumerable();
}

// the above code isn't tested it is just a sample idea

Так что я хотел бы знать:

а) Можно ли это сделать одним оператором L2S?
б) Будет ли это эффективнее, чем нынешний способ?

Ответы [ 3 ]

3 голосов
/ 17 ноября 2009

Как насчет чего-то вроде;

var records = from rec in _DB.Records
              from user in _DB.Users.Where(x => x.ManagerId == managerId ||
                                                x.Id == managerId)
              where rec.UserId == user.Id
              select rec;
2 голосов
/ 17 ноября 2009

Вы можете использовать подвыборы или объединения: Linq Sub-Select
избавиться от итераций

1 голос
/ 17 ноября 2009

Кроме того,

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

НТН

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