我需要什么
登录用户需要一个链接到用户链接/注册的项目的所有错误的列表。
我尝试了什么
我从表示层工作三层(演示文稿 - BLL - DALL)我可以发送pk_user_id。我尝试编写一个Linq查询,返回所有错误的列表。我迷失了如何返回该列表。
我对Linq查询很新,所以我猜这是我的问题。 (我知道我需要在最后返回我的清单,但如果我达到那一点,我会很高兴。
我拥有的所有信息
我有一个包含九个表的数据库,但只有四个表示我的问题 [Bugs],[Users],[UsersOnProjects],[Projects]。
我的关系
[Users].pk_users_id -> [UsersOnsProjects].fk_users
[Users].pk_users_id -> [Bugs].fk_creatorOfTheBug
[Users].pk_users_id -> [Bugs].fk_ResponsibleOfTheBug
[Projects].pk_projects_id -> [UsersOnProjects].fk_projects
[Projects].pk_projects_id -> [Bugs].fk_project
其他信息
我“认为”我不能对表[用户]与[错误]的关系做任何事情,因为它不是我需要的责任人或创造者。登录的用户需要查看链接到他注册的项目的每个Bug。
用户使用表[UsersOnPojects]链接到项目。 错误与项目相关联。
**我的代码 - 1(她收到错误,我无法将查询转换为列表)**
public List<Bug> getAllOnProject(int p_user)
{
var query4 = from t in dc.Bugs
join s in dc.Projects
on t.fk_project equals s.pk_project_id
join u in dc.Users
on s.pk_project_id equals u.fk_project
join v in dc.Users
on u.fk_user equals v.pk_User_id
where v.pk_User_id == p_user
select new
{
t.fk_bugstatus,
t.fk_creator,
t.pk_bug_id,
t.title,
t.description,
t.date,
t.fk_priority,
t.fk_project,
t.fk_responsible,
t.openclosed
};
}
我的代码尝试nr 2(这里我有一个包含[UsersOnProjects]所有“正确”行的列表,但我不知道下一步该做什么)
public List<Bug> getAllOnProject(int p_user)
{
var query1 = from t in dc.UsersOnProjects
where t.fk_user == p_user
select t;
List<UsersOnProject> x = query1.ToList();
foreach (var c in x)
{
}
}
谢谢!
答案 0 :(得分:2)
我认为这可能会让你的第一次尝试工作 - 你只需要初始化你的Bug实体,这样就可以创建List<Bug>
:
public static List<Bug> getAllOnProject(int p_user)
{
var query4 = from t in dc.Bugs
join s in dc.Projects on t.fk_project equals s.pk_project_id
join u in dc.Users on s.pk_project_id equals u.fk_project
join v in dc.Users on u.fk_user equals v.pk_User_id
where v.pk_User_id == p_user
select new Bug
{
fk_bugstatus = t.fk_bugstatus,
fk_creator = t.fk_creator,
pk_bug_id = t.pk_bug_id,
title = t.title,
description = t.description,
date = t.date,
fk_priority = t.fk_priority,
fk_project = t.fk_project,
fk_responsible = t.fk_responsible,
openclosed = t.openclosed
};
return query4.ToList();
}
答案 1 :(得分:0)
我将假设存在一些导航属性:
return (from p in dc.Projects
where p.Users.Any(u => u.fk_users == pk_user_id)
from b in p.Bugs
select b).ToList();
编写LINQ查询的一般建议是:使用导航属性代替这些混乱的详细联接。 EF将生成所有必需的SQL连接,同时您可以使用更简洁的语法。