Linq to Entities: не удается заставить работать запрос коллекции - PullRequest
1 голос
/ 31 мая 2011

Я изо всех сил пытаюсь получить коллекцию записей, используя L2E. Вот вид модели: http://pascalc.nougen.com/stuffs/aspnet_linq_model2.png

У меня есть идентификатор пользователя, который связан с 1 или многими группами пользователей, которые сами связаны с TestCase. Я хотел бы получить все тестовые случаи всех групп, с которыми связан идентификатор пользователя X.

Я также заметил, что я не получаю все Project для пользователей, которые связаны с 2 (или более).

Вот как я до сих пор:

    QASModel.QASEntities qasEntities = new QASModel.QASEntities();
QASModel.User authenticatedUserEntity = (from u in qasEntities.Users
                                         where u.ID.Equals(authenticatedUserId)
                                         select u).FirstOrDefault();
// Get the authenticated user usergroups
var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();
// Get all testcases of all user group the authenticated user is associated to
var allTestcases = usergroup.TestCases;
// Get the authenticated user projects based on it's usergroup(s)
var authenticatedUserProjects = usergroup.Projects;

authenticatedUserProjects возвращает только 1 проект, где пользователь связан с 2 проектами. И allTestcases не возвращает никакого результата, хотя в TestCases имеется около 8 записей, связанных с проектом, связанным с одной и той же группой пользователей, к которой принадлежит пользователь.

Спасибо

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Я думаю, что ваша проблема в этой строке:

var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();

Разве ваш код не может получить все UserGroups этого User? Приведенная выше строка вернет только 1 UserGroup, то есть, если пользователь принадлежит более 1 UserGroup, вторая не будет возвращена.

Чтобы исправить это:

var userTestCases = new List<TestCase>();
var userProjects =  new List<Project>();

foreach(UserGroup ug in authenticatedUserEntity.UserGroups)
{
    userTestCases = userTestCases.Concat(ug.TestCases);

    // Get the authenticated user projects based on it's usergroup(s)
    userProjects = userProjects.Concat(ug.Projects);

    ...
}
0 голосов
/ 31 мая 2011
var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();

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

var testcases = from tc in new QASModel.QASEntities().TestCases
where tc.UserGroup.UserId == USERID
select tc

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

...