我正在努力使用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都将实际执行查询。