linq解决连表查询问题

已知detail表有三个值,Id、projectId、deptId、name,project表有三个值Id、deptId、projectName,dept表有两个值Id、deptName(detail表里面projectId为0时,deptId不为0;deptId不为0时,projectId可能为0)。现在要连表,使detail表里面的deptId都变成不为0的值,并且最后得到包含Id、projectId、deptId、name、deptName的表数据
下面是sql文件

SET FOREIGN_KEY_CHECKS=0;


-- Table structure for dept


DROP TABLE IF EXISTS dept;
CREATE TABLE dept (
id int(11) NOT NULL,
deptName varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- Records of dept


INSERT INTO dept VALUES ('1', '一部');
INSERT INTO dept VALUES ('2', '二部');
INSERT INTO dept VALUES ('3', '三部');


-- Table structure for detail


DROP TABLE IF EXISTS detail;
CREATE TABLE detail (
id int(255) NOT NULL,
projectId int(255) DEFAULT NULL,
deptId int(255) DEFAULT NULL,
name varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- Records of detail


INSERT INTO detail VALUES ('1', '0', '1', '王大');
INSERT INTO detail VALUES ('2', '1', '0', '王二');
INSERT INTO detail VALUES ('3', '2', '0', '王三');
INSERT INTO detail VALUES ('4', '3', '2', '王四');
INSERT INTO detail VALUES ('5', '0', '2', '王五');


-- Table structure for project


DROP TABLE IF EXISTS project;
CREATE TABLE project (
id int(11) NOT NULL,
projectname varchar(255) DEFAULT NULL,
deptId int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- Records of project


INSERT INTO project VALUES ('1', '广西', '1');
INSERT INTO project VALUES ('2', '广东', '1');
INSERT INTO project VALUES ('3', '安徽', '2');
INSERT INTO project VALUES ('4', '湖南', '2');
INSERT INTO project VALUES ('5', '湖北', '3');