在我的Web API项目中,我有这个查询连接2个表(Table1和Table2)并返回一个DTO变量:
int my_id=1;
var sample = db.Table1.Where(s1 => s1.Id == my_id)
.Join(db.Table2, s1 => s1.Id, s2 => s2.id_s1,
(s1, s2) => new sampleDTO()
{
User_Id = s1.User.Id,
ProdId = s2.ProdId
}));
现在我想加入Table3,它连接Table1并将参数添加到现有的" sample"变量
我尝试在上面的代码之后添加一个Join子句但是没有用,所以我尝试用Table1和Table3创建一个带有Join子句的新DTO变量,然后合并2个变量但不是&#39工作。
有什么想法吗?感谢。
答案 0 :(得分:2)
使用方法语法,您必须投射一个新对象。但是,如果切换到查询语法:
var result = from s1 in db.Table1
where s1.Id == my_id
join s2 in db.Table2 on s1.Id equals s2.id_s1
join s3 in db.Table3 on s2.SomeProperty equals s3.SomeProperty
select new sampleDTO
{
User_Id = s1.User.Id,
ProdId = s2.ProdId,
//PropertyFromTable3 = s3.SomePropertyFromTable3
};
如果您正在使用某些ORM(如实体框架),请查看 navigation properties - 将节省所有连接的麻烦
答案 1 :(得分:0)
尝试这样的事情:
int my_id=1;
var sample = (from s1 in db.Table1
join s2 in db.Table2
on s1.id equals(s2.id)
join s3 in db.Table3
on s2.id equals(s3.id)
.
.
.
into aux from subquery in aux.DefaultIfEmpty()
where s1.Id == my_id
select new sampleDTO
{
User_Id = s1.User.Id,
ProdId = s2.ProdId
}).ToList<sampleDTO>();