Linq 到实体:无法使集合查询正常工作



我正在努力使用L2E获取记录集合。以下是模型视图:http://pascalc.nougen.com/stuffs/aspnet_linq_model2.png

我有一个用户标识符,它与1个或多个UserGroup相关联,这些UserGroup本身链接到TestCase。我想获得用户id X关联的所有组的所有测试用例。

我还注意到,我并没有为与2(或更多)相关联的用户获取所有Project。

到目前为止,我是这样做的:

    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个项目。所有测试用例都没有返回任何结果,尽管在测试用例中有大约8个条目与一个项目相关,该项目与用户所属的同一UserGroup之一相关

感谢

我认为你的问题在这一行:

var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();

你的代码不应该得到User的所有UserGroups吗?上面的行将只返回1个UserGroup,也就是说,如果用户属于多个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);
    ...
}
var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();

可能是错误的,因为您想要与该用户关联的所有用户组。在任何情况下,您都可以很容易地恢复查询,使其像一样工作

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

这样,您就不必执行多个查询来获得所有测试用例,每个FirstOrDefault、ToList或ForEach都将实际执行查询。

相关内容

  • 没有找到相关文章

最新更新