我正在努力使用L2E获取记录集合。这是模型视图: http://pascalc.nougen.com/stuffs/aspnet_linq_model2.png
我有一个用户标识符,它与1个或多个UserGroup相关联,这些UserGroup本身链接到TestCase。我想得到用户ID与之关联的所有组的所有TestCase。
我还注意到,我没有为与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个条目与一个与用户所属的同一个UserGroup相关联的项目相关联。
由于
答案 0 :(得分:1)
我认为你的问题就在这一行:
var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();
您的代码不应该获得UserGroups
的全部User
吗?上面的行只返回1 UserGroup
,如果用户属于1 UserGroup
以上,则不会返回第2行。
要纠正这个问题:
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);
...
}
答案 1 :(得分:0)
var usergroup = authenticatedUserEntity.UserGroups.FirstOrDefault();
可能是错误的,因为您需要与用户关联的所有用户组。 在任何情况下,您都可以轻松恢复查询以便像这样工作
var testcases = from tc in new QASModel.QASEntities().TestCases
where tc.UserGroup.UserId == USERID
select tc
这样您就不必执行多个查询来获取所有测试用例,每个FirstOrDefault或ToList或ForEach将实际执行查询。