Linq to Entities:无法获取集合查询工作

时间:2011-05-30 20:45:05

标签: asp.net linq-to-entities entitycollection

我正在努力使用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相关联的项目相关联。

由于

2 个答案:

答案 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将实际执行查询。